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 <algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
 
const ll INF = 1000000000000000009;
const ll MOD = 1000000007;
 
ll s[100005];
int ca[100005], cb[100005];
ll dpa[100005], dpb[100005];
 
int main()
{
    ll n, a, b;
    cin >> n >> a >> b;
    s[0] = -INF;
    for(int i = 1; i <= n; i++) cin >> s[i];
    for(int i = 1; i <= n; i++){
        ca[i] = ca[i - 1];
        cb[i] = cb[i - 1];
        if(s[i] - s[i - 1] >= a) ca[i]++;
        if(s[i] - s[i - 1] >= b) cb[i]++;
    }
    dpa[0] = dpa[1] = dpb[0] = dpb[1] = 1;
    for(int i = 2; i <= n; i++){
        if(ca[i] - ca[i - 1]) dpa[i] = (dpa[i - 1] + dpb[i - 1]) % MOD;
        else{
            int j = upper_bound(s, s + n + 1, s[i] - a) - s;
            if(cb[i - 1] - cb[j] == (i - 1) - j) dpa[i] = dpb[j];
        }
        if(cb[i] - cb[i - 1]) dpb[i] = (dpa[i - 1] + dpb[i - 1]) % MOD;
        else{
            int j = upper_bound(s, s + n + 1, s[i] - b) - s;
            if(ca[i - 1] - ca[j] == (i - 1) - j) dpb[i] = dpa[j];
        }
    }
    cout << (dpa[n] + dpb[n]) % MOD << endl;
}