Problem: There is a set consisting of N distinct integers. The i-th smallest element in this set is S_i. We want to divide this set into two sets, X and Y, such that:

* The absolute difference of any two distinct elements in X is A or greater.
* The absolute difference of any two distinct elements in Y is B or greater.



How many ways are there to perform such division, modulo 10^9 + 7? Note that one of X and Y may be empty.

Constraints

* All input values are integers.
* 1 ≦ N ≦ 10^5
* 1 ≦ A , B ≦ 10^{18}
* 0 ≦ S_i ≦ 10^{18}(1 ≦ i ≦ N)
* S_i < S_{i+1}(1 ≦ i ≦ N - 1)

Input

The input is given from Standard Input in the following format:


N A B
S_1
:
S_N


Output

Print the number of the different divisions under the conditions, modulo 10^9 + 7.

Examples

Input

5 3 7
1
3
6
9
12


Output

5


Input

7 5 3
0
2
4
7
8
11
15


Output

4


Input

8 2 9
3
4
5
13
15
22
26
32


Output

13


Input

3 3 4
5
6
7


Output

0

Solution (in CPP):

Solution:
#include <cstdio>

using namespace std;
typedef long long LL;

const int N=1e5+10,Mod=1e9+7;

LL A,B,val[N];
int n,sum[N];

struct Bit
{
	#define lowbit(x) ((x)&(-(x)))
	int v[N],cset[N],cv[N],cnt;
	
	Bit() { for (int i=0;i<N;++i) v[i]=0; }
	
	void Clear()
	{
		while (cnt)
		{
			Add(cset[cnt],-cv[cnt],1);
			cnt--;
		}
	}
	
	void Add(int set,int value,bool fl=0)
	{
		if (!fl) { ++cnt; cset[cnt]=set; cv[cnt]=value; }
		set++;
		for (;set<N;set+=lowbit(set))
			v[set]=(v[set]+value)%Mod;
	}
	
	int Query(int set)
	{
		set++;
		int ret=0;
		for (;set;set-=lowbit(set))
			ret=(ret+v[set])%Mod;
		return ret;
	}
}bit1,bit2;

void Init()
{
	scanf("%d%lld%lld",&n,&A,&B);
	for (int i=1;i<=n;++i) scanf("%lld",&val[i]);
}

void Solve()
{
	bit1.Add(0,1); bit2.Add(0,1);
	int p1=1,p2=1;
	for (int i=1;i<n;++i)
	{
		while (val[i+1]-val[p1]>=B) p1++;
		int v2=bit1.Query(p1-1);
		if (val[i+1]-val[i]<A) bit1.Clear();
		
		while (val[i+1]-val[p2]>=A) p2++;
		int v1=bit2.Query(p2-1);
		if (val[i+1]-val[i]<B) bit2.Clear();
		
		bit2.Add(i,v2);
		bit1.Add(i,v1);
	}
	printf("%d\n",(bit1.Query(n)+bit2.Query(n))%Mod);
}

int main()
{
	Init();
	Solve();
	return 0;
}