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;

const int MAXN = 1e5 + 10, MOD = 1e9 + 7;

inline int add(int x, int y){
	return (x + y) % MOD;
}

ll a[MAXN], dp[MAXN][2], ps[MAXN][2];

int main(){
	int n;
	ll A, B;
	cin >> n >> A >> B;
	for(int i = 0; i < n; i++)
		cin >> a[i];
	dp[0][0] = 1;
	dp[0][1] = 1;
	ps[0][0] = 1;
	ps[0][1] = 1;
	int l1 = 0, l2 = 0;
	for(int i = 1; i < n; i++){
		int id1 = upper_bound(a, a + i - 1, a[i] - A) - a;
		int id2 = upper_bound(a, a + i - 1, a[i] - B) - a;
		if(id2 >= l2)
			dp[i][0] = add(dp[i][0], ps[id2][1]);
		if(id1 >= l1)
			dp[i][1] = add(dp[i][1], ps[id1][0]);
		//cerr << dp[i][0]  << "    " << dp[i][1] << endl;
		ps[i][0] = dp[i][0];
		ps[i][1] = dp[i][1];
		if(a[i] - a[i - 1] < A)
			l2 = i;
		else
			ps[i][1] = add(ps[i][1], ps[i - 1][1]);
		if(a[i] - a[i - 1] < B)
			l1 = i;
		else
			ps[i][0] = add(ps[i][0], ps[i - 1][0]);
		//cerr << dp[i][0] << "    " << dp[i][1] << "                " << l1 << "   " << id1 << endl;
	}
	cout << add(ps[n - 1][0], ps[n - 1][1]) << endl;
	return 0;
}