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>
#define N 100005

using namespace std;

const int mod = 1e9 + 7;

int n;
int las[N];
long long A, B;
long long a[N], f[N], sum[N];

template <typename T> inline void read(T &x) {
	x = 0; char ch = getchar();
	while(!isdigit(ch)) ch = getchar();
	while(isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
}

int main() {
	read(n), read(A), read(B);
	if(A < B) swap(A, B);
	a[0] = -1e18;
	for(int i = 1; i <= n; ++i) {
		read(a[i]);
		if(i > 1 && a[i] - a[i - 2] < B) {
			/* 每隔一个一定要大于较小的数 B */
			puts("0");
			return 0;
		}
	}
	int p(0);
	for(int i = 1; i <= n; ++i) {
		while(p < i && a[i] - a[p + 1] >= A) ++p;
		las[i] = (a[i] - a[i - 1] >= B ? las[i - 1] : i);
		if(las[i - 1] == 0) {
			++f[i];
		} if(p >= las[i - 1] - 1) {
			f[i] = (f[i] + sum[p] - sum[max(0, las[i - 1] - 2)] + mod) % mod;
		}
		sum[i] = (f[i] + sum[i - 1]) % mod;
	}
	long long ans = 0;
	if(las[n] == 0) ++ans;
	ans = (ans + sum[n] - sum[max(0, las[n] - 2)]+ mod) % mod;
	cout << ans << endl;
	return 0;
}