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:
//In the Name of God
//Ya Ali

#include<bits/stdc++.h>

#define int long long

#define err(A) cout<<#A<<" = "<<(A)<<endl

using namespace std;

const int M=1e9+7;
const int inf=(int)2e18+10;
const int maxn=100100;

int n,X,Y;

int a[maxn];

int dp[maxn][2];
int pp[maxn][2];

int ans;

int32_t main()
{
  ios::sync_with_stdio(0);cin.tie(0);
  
  cin>>n>>X>>Y;

  a[0]=-inf;
  for(int i=1;i<=n;i++)
    cin>>a[i];
  a[n+1]=inf;

  pp[n][0]=pp[n][1]=1;
  dp[n][0]=dp[n][1]=1;
  
  int Rx=n+1,Ry=n+1;
  for(int l,r,i=n-1;i>=0;i--)
    {
      pp[i][0]=pp[i+1][0];
      pp[i][1]=pp[i+1][1];
      //X:
      l=lower_bound(a,a+n+1,a[i]+X)-a;
      r=Ry;
      if(r>=l)
	dp[i][0]=(pp[l-1][1]-pp[r][1])%M;
      //Y:
      l=lower_bound(a,a+n+1,a[i]+Y)-a;
      r=Rx;
      if(r>=l)
	dp[i][1]=(pp[l-1][0]-pp[r][0])%M;
      //////
      pp[i][0]=(dp[i][0]+pp[i+1][0])%M;
      pp[i][1]=(dp[i][1]+pp[i+1][1])%M;

      if(a[i+1]-a[i]<X)
	Rx=i+1;
      if(a[i+1]-a[i]<Y)
	Ry=i+1;
    }

  for(int i=0;i<=n;i++)
    {
      ans=(ans+dp[i][0])%M;
      if(a[i+1]-a[i]<X)
	break;
    }

  cout<<(ans%M+M)%M<<endl;
  
  return 0;
}