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 <vector>

using namespace std;

const int MOD = 1000000007;

int main(){
	static long long dp[2][100001];
	long long N, A, B;
	while(cin >> N >> A >> B){
		vector<long long> S(N);
		for(int i=0;i<N;i++) cin >> S[i];
		int valid[2] = {0, 0};
		dp[0][0] = dp[1][0] = 1;
		for(int i=1;i<N;i++){
			dp[0][i] = dp[1][i] = 0;
			auto lastIdx = [&](int start, long long dif){
				int low = start-1, high = i;
				while(high - low > 1){
					int mid = (low+high)/2;
					if(mid > 0 && S[i] - S[mid-1] < dif) high = mid;
					else low = mid;
				}
				return low;
			};
			int idx = lastIdx(valid[1], A);
			dp[0][i] = dp[1][idx] - (valid[1] > 0 ? dp[1][valid[1]-1] : 0);
			dp[0][i] = (dp[0][i] + dp[0][i-1] + MOD)%MOD;
			idx = lastIdx(valid[0], B);
			dp[1][i] = dp[0][idx] - (valid[0] > 0 ? dp[0][valid[0]-1] : 0);
			dp[1][i] = (dp[1][i] + dp[1][i-1] + MOD)%MOD;
			if(S[i]-S[i-1] < A) valid[0] = i;
			if(S[i]-S[i-1] < B) valid[1] = i;
		}
		long long res = 0;
		res = (res + dp[0][N-1])%MOD;
		if(valid[0] > 0) res = (res - dp[0][valid[0]-1] + MOD)%MOD;
		res = (res + dp[1][N-1])%MOD;
		if(valid[1] > 0) res = (res - dp[1][valid[1]-1] + MOD)%MOD;
		cout << res << endl;
	}
}