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>

const int MAXN = 100010;
const int mod = 1000000007;
typedef long long LL;
void reduce(int & x) { x += x >> 31 & mod; }
int n, f[MAXN];
LL A[MAXN], X, Y;
int main() {
	std::ios_base::sync_with_stdio(false), std::cin.tie(0);
	std::cin >> n >> X >> Y; if (X < Y) std::swap(X, Y);
	for (int i = 1; i <= n; ++i) std::cin >> A[i];
	A[n + 1] = A[n] + X; ++n;
	f[0] = 1; A[0] = -X;
	int l = 0, r = 0;
	for (int i = 1; i <= n; ++i) {
		while (A[i] - A[r] >= X) ++r;
		if (i > 1 && A[i - 1] - A[i - 2] < Y) {
			if (A[i - 1] - A[l] < Y)
				return std::cout << 0 << std::endl, 0;
			l = i - 2;
		}
		// std::cout << "NOW " << i << ' ' << l << ' ' << r - 1;
		if (l < r) {
			reduce(f[i] += f[r - 1] - mod);
			if (l) reduce(f[i] -= f[l - 1]);
		}
		// std::cout << ' ' << f[i] << std::endl;
		if (i != n) reduce(f[i] += f[i - 1] - mod);
	}
	std::cout << f[n] << std::endl;
	return 0;
}