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>

using namespace std;

typedef long long ll;

const int N = 1e5 + 500;
const ll INF = 1e18;
const int MOD = 1e9 + 7;

inline ll labs(ll x){
	return (x < 0 ? -x : x);
}

inline int add(int A, int B){
	if(A + B >= MOD)
		return A + B - MOD;
	return A + B;
}

int mogu[N][2], n, dp[N][2];
ll gr[2], A[N], S[N];

bool moze(int l,int r, int k){
	return (mogu[r][k] == mogu[l][k]) || (l > r);
}

int main(){
	scanf("%d%lld%lld", &n, gr, gr + 1);
	for(int i = 1;i <= n;i++)
		scanf("%lld", S + i);
	S[0] = -INF;
	for(int i = 1;i <= n;i++){
		for(int j = 0;j < 2;j++){
			mogu[i][j] = mogu[i - 1][j] + (S[i] - S[i - 1] < gr[j]);
		}
	}
	dp[0][0] = 1; dp[0][1] = 0;
	int sad[2] = {0, 0};
	for(int i = 1;i <= n;i++){
		for(int j = 0;j < 2;j++){
			while(S[i] - S[sad[j] + 1] >= gr[j])
				sad[j]++;
			if(moze(sad[j] + 1, i - 1, !j)){
				if(sad[j] + 1 < i)
					dp[i][j] = add(dp[i][j], dp[sad[j] + 1][!j]);
				else
					dp[i][j] = add(dp[i][j], add(dp[i - 1][0], dp[i - 1][1]));
			}
		}
	}
	printf("%d\n", add(dp[n][0], dp[n][1]));
}