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>
#include<algorithm>
using namespace std;
#define ll long long
inline ll read()
{
	ll x;char c;
	while((c=getchar())<'0'||c>'9');
	for(x=c-'0';(c=getchar())>='0'&&c<='9';)x=x*10+c-'0';
	return x;
}
#define MN 100000
#define MOD 1000000007
ll s[MN+5];
int l[MN+5],f[MN+5][2],S[MN+5];
inline int mod(int x){return x<MOD?x:x-MOD;}
int main()
{
	int n,i,x;ll a,b;
	n=read();a=read();b=read();if(a>b)swap(a,b);
	for(i=1;i<=n;++i)s[i]=read();s[0]=-1e18;s[++n]=2e18;
	for(l[1]=i=1;++i<n;)l[i]=s[i]-s[i-1]<a?i:l[i-1];
	for(f[0][1]=S[0]=i=1;i<=n;++i)
	{
		if(s[i]-s[i-1]>=b)f[i][1]=mod(f[i-1][0]+f[i-1][1]);
		if(i>1)
		{
			x=min(i-2,(int)(upper_bound(s,s+n+1,s[i]-b)-s-1));
			if(l[i-1]-1<=x)f[i][0]=mod(S[x]+MOD-(l[i-1]-1>0?S[l[i-1]-2]:0));
		}
		S[i]=mod(S[i-1]+mod((s[i+1]-s[i-1]>=a?f[i][0]:0)+f[i][1]));
	}
	printf("%d",mod(f[n][0]+f[n][1]));
}