from bisect import bisect_left as bil, bisect_right as bir class UnionFind: def __init__(self, n=0): self.d = [-1]*n self.u = n def root(self, x): if self.d[x] < 0: return x self.d[x] = self.root(self.d[x]) return self.d[x] def unite(self, x, y): x, y = self.root(x), self.root(y) if x == y: return False if x > y: x, y = y, x self.d[x] += self.d[y] self.d[y] = x self.u -= 1 return True def same(self, x, y): return self.root(x) == self.root(y) def size(self, x): return -self.d[self.root(x)] def num_union(self): return self.u N, A, B = map(int, input().split()) *X, = map(int, input().split()) uf = UnionFind(N) lr = rr = -10**10 for i, x in enumerate(X): ll = max(lr, bil(X, x-B)) rl = max(rr, bil(X, x+A)) lr = bir(X, x-A) rr = bir(X, x+B) for j in range(ll, lr): uf.unite(i, j) for j in range(rl, rr): uf.unite(i, j) for i in range(N): print(uf.size(i))