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;

const int N = 1e5 + 15;
const int mod = 1e9 + 7;

int n, f[2][N], s[2][N], g[2][N];
long long a[N], x[2];

int main() {
    ios::sync_with_stdio(false);
    cin >> n >> x[0] >> x[1];
    for (int i = 1; i <= n; ++i) cin >> a[i];
    a[n + 1] = a[n] + max(x[0], x[1]);
    for (int i = 0; i <= 1; ++i) {
        for (int j = 1; j <= n; ++j) {
            g[i][j] = j;
            if (a[j] - a[j - 1] >= x[i]) {
                g[i][j] = g[i][j - 1];
            }
        }
    }
    s[0][0] = s[1][0] = 1;
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j <= 1; ++j) {
            int tmp = lower_bound(a + 1, a + n + 2, a[i + 1] - x[j ^ 1] + 1) - a - 1;
            if (tmp == i) tmp--;
            if (g[j][i] - 1 <= tmp) {
                f[j][i] = s[j ^ 1][tmp];
                if (g[j][i] >= 2) {
                    f[j][i] = (f[j][i] - s[j ^ 1][g[j][i] - 2] + mod) % mod;
                }
            }
            s[j][i] = (s[j][i - 1] + f[j][i]) % mod;
            //cout << f[j][i] << ' ' << j << ' ' << i << '\n';
        }
    }
    cout << (f[0][n] + f[1][n]) % mod;
}