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 MOD 1000000007
using namespace std;
typedef long long LL;

int main(){
	LL n, a, b;
	cin >> n >> a >> b;
	LL s[n];
	for(int i = 0; i < n; i++) cin >> s[i];
	LL ans[n+1];
	LL ans1[n+1];
	LL ans2[n+1];
	for(int i = 0; i <= n; i++) ans[i] = ans1[i] = ans2[i] = 0;
	ans[n] = 1;
	int ta = n-1;
	int tb = n-1;
	int bada[n+1], badb[n+1];
	for(int i = 0; i < n; i++){
		bada[i+1] = badb[i+1] = 0;
		if(s[i+1] - s[i] < a){
			bada[i+1] = 1;
		}
		if(s[i+1] - s[i] < b){
			badb[i+1] = 1;
		}
	}
	bada[0] = badb[0] = 0;
	for(int i = 1; i <= n; i++){
		bada[i] += bada[i-1];
		badb[i] += badb[i-1];
	}
	for(int i = n-1; i >= 0; i--){
		while(s[ta] >= a + s[i]) ta--;
		while(s[tb] >= b + s[i]) tb--;
		if(ta == i){
			ans1[i] += ans[i+1];
		} else {
			if(badb[ta]-badb[i+1] == 0) ans1[i] += ans2[ta];
		}
		if(tb == i){
			ans2[i] += ans[i+1];
		} else {
			if(bada[tb]-bada[i+1] == 0)  ans2[i] += ans1[tb];
		}
		ans[i] = ans1[i] + ans2[i];
		ans1[i] %= MOD;	
		ans2[i] %= MOD;
		ans[i] %= MOD;
	}
	cout << ans[0] << endl;
}