#include <bits/stdc++.h>

#define ld long double
#define ll long long
#define ull unsigned long long

#define f first
#define s second

#define endl '\n'
#define pii pair <ll, ll>

#define ios ios_base::sync_with_stdio(0), cin.tie()
#define pb push_back
#define mp make_pair

#define pi 3.14159265358979323846264
#define y1 abacaba
 
#define fn "abc"

using namespace std;

const int MXN = 1e5 + 30;
const int MAXN = 1e3 + 2;
const ll INF = 1e9 + 7;
const ll BINF = 1e18;
const int mod = 1e9 + 7;
const ld EPS = 1e-15;   
const ll dx[] = {0, 0, 1, -1};
const ll dy[] = {1, -1, 0, 0};

int n;
ll x, y;
ll a[MXN];

ll last[MXN][2];

ll pre[MXN][2];

ll dp[MXN][2];

int main(){
    #ifdef DIAS
        freopen("input.txt", "r", stdin);
    #elif NAME 
    	freopen(fn".in", "r", stdin);
    	freopen(fn".out", "w", stdout);
    #endif
    cin >> n >> x >> y;
    a[0] = -BINF;
    pre[0][0] = -1;
    pre[0][1] = -1;
    for(int i = 1; i <= n; i++){
    	cin >> a[i];
    	if(a[i] - a[i - 1] >= x) last[i][0] = last[i - 1][0];
    	else last[i][0] = i;

    	if(a[i] - a[i - 1] >= y) last[i][1] = last[i - 1][1];
    	else last[i][1] = i;

    	pre[i][0] = pre[i - 1][0];
    	while(a[i] - a[pre[i][0] + 1] >= x && pre[i][0] +  1 < i) pre[i][0] ++; 

    	pre[i][1] = pre[i - 1][1];
    	while(a[i] - a[pre[i][1] + 1] >= y && pre[i][1] + 1 < i) pre[i][1] ++;  

    }
    dp[0][1] = 1;
    for(int i = 1; i <= n; i++){
    	if(a[i] - a[i - 1] >= x){
    		dp[i][0] = (dp[i - 1][0] + dp[i - 1][1]) % mod;
    	} else{
    		if(last[i - 1][1] <= pre[i][0] + 1){
    			dp[i][0] = dp[pre[i][0] + 1][1];
    		} else{
    			dp[i][0] = 0;
    		}
    	}
    	
    	if(a[i] - a[i - 1] >= y){
    		dp[i][1] = (dp[i - 1][1] + dp[i - 1][0]) % mod;
    	} else{         	
    		if(last[i - 1][0] <= pre[i][1] + 1){
    			dp[i][1] = dp[pre[i][1] + 1][0];
    		} else{
    			dp[i][1] = 0;
    		}
    	}

    	//cout << dp[i][0] << ' ' << dp[i][1] << endl;
    }
    cout << dp[n][0] + dp[n][1];
    return 0;
}