#include using namespace std; //定数 const long long MOD1=1000000007; const long long MOD2=998244353; const long double PI=3.1415926535897932; const long long MAXLL=9223372036854775807; const long long INF=2305843009213693951; const long long dx[]={0,1,0,-1,1,-1,1,-1}; const long long dy[]={1,0,-1,0,1,1,-1,-1}; //省略 #define ll long long #define ull unsigned long long #define ld long double #define uld unsigned long double #define pll pair #define vl vector #define vvl vector> #define vvvl vector>> #define vc vector #define vvc vector> #define vs vector #define vb vector #define vvb vector> #define vp vector> #define umap unordered_map #define uset unordered_set #define Lqueue priority_queue #define Squeue priority_queue,greater> #define fi first #define se second #define mp make_pair #define eb emplace_back //マクロ #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define rbf(a,x) for(auto& a:x) #define rep(i,n) for(long long i=0;i<(long long)(n);i++) #define rep2(i,s,n) for(long long i=(s);i<(long long)(n);i++) #define bitrep(i,s,n) for(long long i=(s);i<(1LL<<(n));i++) #define bitcheck(bit,i) (bit)&(1LL<<(i)) #define Maxe(x) *max_element((x).begin(),(x).end()) #define Mine(x) *min_element((x).begin(),(x).end()) #define Size(x) ((long long)(x).size()) #define Lin(s) getline(cin,(s)) //Yes,No void Yes(bool a){cout<<(a?"Yes":"No")< auto max(T a,U b){return a>b?a:b;} template auto min(T a,U b){return a constexpr t my_pow(t a,long long b){ if(b==0)return 1; if(a==0)return 0; t x=1; while(b>0){ if(b&1LL)x*=a; a*=a; b>>=1LL; } return x; } #define pow my_pow //chmin,chmax template inline bool chmin(T& a,T b){if(a>b){a=b;return true;}return false;} template inline bool chmax(T& a,T b){if(a constexpr t nCr(t n,long long r){ if(r==0)return 1; if(n==0)return 0; if(n par; UnionFind(int n) : par(n, -1) { } int root(int x) { if (par[x] < 0) return x; else return par[x] = root(par[x]); } bool issame(int x, int y) { return root(x) == root(y); } bool merge(int x, int y) { x = root(x); y = root(y); if (x == y) return false; if (par[x] > par[y]) swap(x, y); // merge technique par[x] += par[y]; par[y] = x; return true; } int size(int x) { return -par[root(x)]; } }; //main関数 signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll n,a,b; cin>>n>>a>>b; UnionFind UF(n); vl x(n+2); x[0]=-INF; x[n+1]=INF; rep2(i,1,n+1)cin>>x[i]; rep2(i,1,n+1){ int ind1=lower_bound(all(x),x[i]+a)-x.begin(); int ind2=upper_bound(all(x),x[i]+b)-x.begin(); ind2--; if(ind2