#include #include #include #include #include #include #include using namespace std; typedef long long ll; int x[200000]; map ans; int N, A, B; set st; void bfs(int x){ queue que; vector used; que.push(x); st.erase(x); used.push_back(x); while(!que.empty()){ int v = que.front(); que.pop(); // if(st.count(v) == 0) continue; set buf; { auto pl = st.lower_bound(v-B); auto pr = st.upper_bound(v-A); for(auto i = pl; i != pr; i++){ que.push(*i); buf.insert(*i); } } { auto pl = st.lower_bound(v+A); auto pr = st.upper_bound(v+B); for(auto i = pl; i != pr; i++){ que.push(*i); buf.insert(*i); } } for(int i : buf) { st.erase(i); used.push_back(i); } } for(int i : used) ans[i] = used.size(); } const int INF = 2e9; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout << setprecision(10) << fixed; cin >> N >> A >> B; for(int i = 0; i < N; i++){ cin >> x[i]; st.insert(x[i]); } st.insert(-INF); st.insert(INF); for(int i = 0; i < N; i++){ if(st.count(x[i]) != 0){ bfs(x[i]); } } for(int i = 0; i < N; i++){ cout << ans[x[i]] << endl; } }