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<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<bitset>
#include<map>

#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

typedef long long LL;
typedef double db;

const int N = 1e+5+5;
const int mo = 1e+9+7;

int n;
LL a[N];
LL A,B;
int f0[N],f1[N];

int add(int x,int y){return x+y>=mo?x+y-mo:x+y;}

int main(){
	scanf("%d%lld%lld",&n,&A,&B);
	fo(i,1,n)scanf("%lld",&a[i]);
	f0[0]=f1[0]=1;
	int p0=1,p1=1,l0=-1,l1=-1,w0=0,w1=0;
	fo(i,2,n){
		while(w0<=i&&a[i]-a[w0+1]>=B)p0=add(p0,f0[++w0]);
		int tmp0=p0;
		if (a[i]-a[i-1]<A){fo(j,l0+1,i-1)f0[j]=0;l0=i-2;p0=0;}
		while(w1<=i&&a[i]-a[w1+1]>=A)p1=add(p1,f1[++w1]);
		int tmp1=p1;
		if (a[i]-a[i-1]<B){fo(j,l1+1,i-1)f1[j]=0;l1=i-2;p1=0;}
		f0[i-1]=add(f0[i-1],tmp1);f1[i-1]=add(f1[i-1],tmp0);
		if (i-1<=w0)p0=add(p0,tmp1);
		if (i-1<=w1)p1=add(p1,tmp0);
	}
	int ans=0;
	fo(i,0,n)ans=add(ans,add(f0[i],f1[i]));
	printf("%d\n",ans);
	return 0;
}