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 <cstdio>
#include <algorithm>
using namespace std;
typedef long long int ll;

const ll INF = (ll)2e18;
const ll MOD = 1000000007LL;

ll S[100010];
ll dp[100010];
int main() {
    ll N, A, B; scanf("%lld%lld%lld", &N, &A, &B);
    if(A > B) swap(A, B);
    S[0] = S[1] = -INF;
    for(int i=0; i<N; i++) scanf("%lld", &S[i+2]);

    dp[1] = 1;
    int ptr = 1;
    int ub = 0;
    for(int i=2; i<N+2; i++) {
        if(S[i] - S[i-2] < A) {
            printf("0\n");
            return 0;
        }
        // current: i
        // prev: i-1

        // 二つ目の山に入れる
        int lb = ptr - 1;
        while(S[i] - S[ub+1] >= B) ub++;
        ll val = (lb >= ub ? 0 : dp[ub]);

        // 一つ目の山に入れる
        ll diff = S[i] - S[i-1];
        if(diff < A) {
            // dp[i-2] 以前の要素は全て 0 になる
            // 0 でない値が格納されているインデックスの下限は i-1 になり、
            // その値について、累積を解除
            ptr = i-1;
            dp[i-1] = (dp[i-1] - dp[i-2] + MOD) % MOD;
        }
        dp[i] = (dp[i-1] + val) % MOD;
    }

    printf("%lld\n", dp[N+1]);
    return 0;
}