import sys sys.setrecursionlimit(10 ** 6) def input(): return sys.stdin.readline().rstrip('\n') class DSU: def __init__(self, n): self.p = list(range(n)) def find(self, x): if x == self.p[x]: return x self.p[x] = self.find(self.p[x]) return self.p[x] def union(self, a, b): self.p[self.find(a)] = self.find(b) def main(): n, a, b = map(int, input().split()) *x, = map(int, input().split()) dsu = DSU(n) def connect(f, t): a, b = f c, d = t for i in range(a, b-1): dsu.union(i, i + 1) for i in range(c, d-1): dsu.union(i, i + 1) dsu.union(a, c) ja = jb = 0 pri = prr = None for i in range(n): while ja < n and x[ja] < x[i] + a: ja += 1 while jb < n and x[jb] <= x[i] + b: jb += 1 if pri is None: if ja != jb: pri, prr = (i, i + 1), (ja, jb) else: prs, pre = prr if ja != jb and pre > ja: pri, prr = (pri[0], i + 1), (prs, jb) else: connect(pri, prr) pri = prr = None if ja != jb: pri, prr = (i, i + 1), (ja, jb) if pri is not None: connect(pri, prr) ans = [0] * n for i in range(n): ans[dsu.find(i)] += 1 for i in range(n): print(ans[dsu.find(i)]) if __name__ == '__main__': ret = main() if ret is not None: print(ret)