#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
#define eprintf(...) fprintf(stderr,__VA_ARGS__)

const int N=int(1e5)+5;
const int mo=int(1e9)+7;
const ll inf=ll(1e18)+7;

int n;

ll A[2],S[N];
int f[2][N],sum[2][N];
int last[2][N];
int p[2];

inline int getsum(const int t,const int l,const int r){
	return l>r?0:(sum[t][r]-sum[t][l-1]+mo)%mo;
}

int main(){
	scanf("%d%lld%lld",&n,&A[0],&A[1]);
	S[0]=-inf;
	for(int i=1;i<=n;i++) scanf("%lld",&S[i]);
	for(int t=0;t<=1;t++)
		for(int i=1;i<=n;i++){
			last[t][i]=(i>1&&S[i]-S[i-1]>=A[t]?last[t][i-1]:i);
		}
	f[0][1]=1;
	f[1][1]=1;
	sum[0][1]=1;
	sum[1][1]=1;
	p[0]=0;
	p[1]=0;
	for(int i=2;i<=n;i++)
		for(int t=0;t<=1;t++){
			for(;S[i]-S[p[t]+1]>=A[t];p[t]++);
			f[t][i]=getsum(t^1,last[t^1][i-1],min(i-1,p[t]+1));
			sum[t][i]=(sum[t][i-1]+f[t][i])%mo;
		}
	int ans=0;
	for(int t=0;t<=1;t++){
		int q=n;
		while(q>1&&S[q]-S[q-1]>=A[t]) q--;
		ans=(ans+getsum(t,q,n))%mo;
	}
	printf("%d\n",ans);
}