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 F first
#define S second
#define pb push_back
#define ll long long
#define int long long 

using namespace std ;

const int MAXN = 101 * 1001 , MOD = 1e9 + 7  ;

int dp[MAXN][2] , a[MAXN] , ps[MAXN][2];

int nxt[MAXN][2] ;

int32_t main()
{
    ios::sync_with_stdio(0) ; cin.tie(0) ;
    int n , x[2];
    cin >> n >> x[0] >> x[1] ;
    for(int i = 0 ; i < n ; i ++ )
        cin >> a[i] ;
    dp[n-1][0] = dp[n-1][1] = 1 ;
    int last[2] ;
    last[0] = last[1] = n  ;
    dp[n][0] = dp[n][1] = 1 ;
    ps[n-1][0] = ps[n-1][1] = 1 ;
    nxt[n-1][0] = nxt[n-1][1] = n ;
    for(int i = n - 2 ; i > -1 ; i -- )
    {
        for(int q = 0 ; q < 2 ; q ++ ) {
            int j = lower_bound(a,a+n,a[i]+x[q]) - a ;
            if(last[q]<j)
                continue ;
            if(j==i+1)
                dp[i][q] = (dp[i+1][0] + dp[i+1][1]) % MOD ;
            else
                dp[i][q] = dp[j-1][1-q] ;
        }
        if(a[i+1]-a[i]<x[0])
            last[1] = i + 1  ;
        if(a[i+1]-a[i]<x[1])
            last[0] = i + 1 ;
    }
    cout << (dp[0][0] + dp[0][1] ) % MOD << endl ; ;
}