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;

int n;
long long A, B;

const int maxn = 100010;
const int mod = 1e9 + 7;
long long S[maxn];

struct arr {
	int a[maxn];
	int s[maxn];
	int cur;
	int last;
	void ins(int val) {
		int i = cur++;
		s[i] = a[i] = val;
		if(i) (s[i] += s[i-1]) %= mod;
	}
	void clear() {
		for(int i = last; i < cur; ++i)
			a[i] = s[i] = 0;
		last = cur;
	}
} ax, ay;

int main() {
	scanf("%d", &n); scanf("%lld", &A); scanf("%lld", &B);
	for(int i = 1; i <= n; ++i) scanf("%lld", &S[i]);

	int lx = 0, ly = 0;
	ax.ins(1); ay.ins(1);

	for(int i = 2; i <= n; ++i) {
		while(S[i] - S[lx + 1] >= A) ++lx;
		while(S[i] - S[ly + 1] >= B) ++ly;
		int fx = ay.s[min(i-2, lx)];
		int fy = ax.s[min(i-2, ly)];
		if(lx != i-1) ax.clear();
		if(ly != i-1) ay.clear();
		ax.ins(fx);
		ay.ins(fy);
	}

	long long ans = ax.s[n-1] + ay.s[n-1];
	cout << ans % mod << endl;
	return 0;
}