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 <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <cassert>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
// head

const int N=101000;
int n,dp[N];
ll a,b,s[N],sdp[N];
int main() {
	scanf("%d%lld%lld",&n,&a,&b);
	if (a>b) swap(a,b);
	rep(i,1,n+1) scanf("%lld",s+i);
	s[n+1]=s[n]+b;
	s[0]=-b;
	dp[0]=1; dp[1]=1;
	sdp[0]=1; sdp[1]=2;
	int l=0,r=0;
	rep(i,2,n+2) {
		if (s[i]-s[i-1]>=b) dp[i]=(dp[i]+dp[i-1])%mod;
		while (r<=i-2&&s[i]-s[r]>=b) ++r; --r;
		if (l<=r) dp[i]=(dp[i]+sdp[r]-(l==0?0:sdp[l-1]))%mod;
		if (dp[i]<0) dp[i]+=mod;
		if (s[i]-s[i-1]<a) l=i-1;
		if (s[i+1]-s[i-1]>=a) sdp[i]=(sdp[i-1]+dp[i])%mod; else sdp[i]=sdp[i-1];
	}
	printf("%d\n",dp[n+1]);
}