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 <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);
}