/*
                ____________    ______________       __
               / _________  /\ /_____   _____/\     / /\
              / /\       / /  \\    /  /\    \ \   / /  \
             / /  \_____/ /   / \__/  /  \____\/  / /   /
            / /   /    / /   /    /  /   /       / /   /
           / /   /    / /   /    /  /   /       / /   /
          / /   /    / /   /    /  /   /       / /   /
         / /___/____/ /   /    /  /   /       / /___/________
        /____________/   /    /__/   /       /______________/\
        \            \  /     \  \  /        \              \ \
         \____________\/       \__\/          \______________\/
           ___       ___               ___    __________
          /  /\     /  /\             /  /\  /_______  /\
         /  /__\___/  /  \           /  /  \ \      /  /  \
        /____    ____/   /          /  /   /  \____/  /   /
        \   /   /\   \  /          /  /   /       /  /   /
         \_/   /  \___\/ ___      /  /   /       /  /   /
          /   /   /     /  /\    /  /   /       /  /   /
         /   /   /     /  /__\__/  /   /       /  /___/____
        /___/   /     /___________/   /       /___________/\
        \   \  /      \           \  /        \           \ \
         \___\/        \___________\/          \___________\/
 
          A FAN OF FIZZYDAVID
 
*/
 
#include<bits/stdc++.h>
 
#define HEAP priority_queue
#define rep(i,n) for(int i=0;i<(n);i++)
#define per(i,n) for(int i=(n)-1;i>=0;i--)
#define forn(i,l,r) for(int i=(l);i<=(r);i++)
#define nrof(i,r,l) for(int i=(r);i>=(l);i--)
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define X first
#define Y second
#define eps 1e-6
#define pi 3.1415926535897932384626433832795
#define orz int
#define yjz main
#define fizzydavid return
#define ak 0
#define la ;
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()
#define FILL(a,b) memset((a),(b),sizeof((a)))
 
using namespace std;
 
typedef long long LL;
typedef double flt;
typedef vector<int> vi;
typedef pair<int,int> pii;
typedef vector<LL> vl;
typedef pair<int,LL> pil;
typedef pair<LL,int> pli;
typedef pair<LL,LL> pll;
typedef vector<pil> vil;
typedef vector<pii> vii;
 
const int iinf=1e9+7;
const LL linf=1ll<<60;
const flt dinf=1e10;
 
template <typename T>
inline void scf(T &x)
{
	bool f=0; x=0; char c=getchar();
	while((c<'0' || c>'9') && c!='-') c=getchar();
	if(c=='-') { f=1; c=getchar(); }
	while(c>='0' && c<='9') { x=x*10+c-'0'; c=getchar(); }
	if(f) x=-x; return;
}
 
template <typename T1,typename T2>
void scf(T1 &x,T2 &y) { scf(x); return scf(y); }
 
template <typename T1,typename T2,typename T3>
void scf(T1 &x,T2 &y,T3 &z) { scf(x); scf(y); return scf(z); }
 
template <typename T1,typename T2,typename T3,typename T4>
void scf(T1 &x,T2 &y,T3 &z,T4 &w) { scf(x); scf(y); scf(z); return scf(w); }
 
#ifdef ONLINE_JUDGE
#define debug(x,c) ;
#else
#define DEBUG
#define debug(x,c) cerr<<#x<<"="<<x<<c;
#endif
 
//---------------------------head----------------------------
 
const int N = 1e5 + 100;
const int mod = 1e9 + 7;
 
int n;
LL x,y;
LL a[N];
 
void add(int &x,int y)
{
    x += y;
    if(x >= mod) x -= mod;
    return;
}
 
struct BIT
{
    vi not_zero;
    int num[N];
    void init()
    {
        for(int i:not_zero) num[i] = 0;
        not_zero.clear();
        return;
    }
    int lowbit(int i){ return i & (-i); }
    void modify(int i,int x)
    {
        i++;
        for(; i <= n + 1; i += lowbit(i))
        {
            add(num[i],x);
            not_zero.pb(i);
        }
        return;
    }
    int query(int i)
    {
        i++;
        int ret = 0;
        for(; i; i ^= lowbit(i)) add(ret,num[i]);
        return ret;
    }
}X,Y;
 
int Find(int lb,int rb,LL x)
{
    while(lb <= rb)
    {
        int mid = lb + rb >> 1;
        if(a[mid] > x) rb = mid - 1;
        else lb = mid + 1;
    }
    return rb;
}
 
orz yjz()
{
    scf(n,x,y);
    forn(i,1,n) scf(a[i]);
    X.modify(0,1); Y.modify(0,1);
    forn(i,2,n)
    {
        int xj = Find(1,i - 1,a[i] - y);
        int yj = Find(1,i - 1,a[i] - x);
        int sx = X.query(xj), sy = Y.query(yj);
        if(a[i] - a[i - 1] < x) X.init();
        if(a[i] - a[i - 1] < y) Y.init();
        X.modify(i - 1,sy);
        Y.modify(i - 1,sx);
    }
    int ans = X.query(n);
    add(ans,Y.query(n));
    printf("%d\n",ans);
	fizzydavid ak la
}

Measured memory_bytes: 11104