#include <bits/stdc++.h> using namespace std; //#include <atcoder/all> //using namespace atcoder; using ll=long long; using Graph=vector<vector<int>>; #define MAX 1000000 #define MOD 1000000007 //#define INF 1000000000 #define INF 1000000000000000000 vector<int> parent; int find(int x){ int y=parent[x]; if(y!=parent[y]){ y=find(y); } return parent[x]=y; } void unite(int a,int b){ int x=find(a); int y=find(b); if(x!=y){ parent[y]=x; } } int main(){ int N,A,B; cin>>N>>A>>B; vector<int> x(N); for(int i=0;i<N;i++){ cin>>x[i]; } vector<int> sum(N+1,0); parent.resize(N); iota(parent.begin(),parent.end(),0); for(int i=0;i<N;i++){ int k=lower_bound(x.begin(),x.end(),x[i]+A)-x.begin(); if(k==N){ continue; } if(x[k]-x[i]<=B){ unite(i,k); sum[k]++; k=upper_bound(x.begin(),x.end(),x[i]+B)-x.begin(); k--; sum[k]--; } } for(int i=1;i<N;i++){ sum[i]+=sum[i-1]; } for(int i=0;i<N-1;i++){ if(sum[i]>0){ unite(i,i+1); } } vector<int> cnt(N,0); for(int i=0;i<N;i++){ cnt[find(i)]++; } for(int i=0;i<N;i++){ cout<<cnt[find(i)]<<endl; } }