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 int long long
using namespace std;
const int mod = 1e9+7;
const int N = 1e6+10;
int arr[N];
int dp[N];
signed main(){
  int n; int X,Y;
  cin>>n>>X>>Y;
  for(int i=0;i<n;i++){
  	cin>>arr[i];
  }
  if(X>Y) swap(X,Y);
  arr[n]=arr[n-1]+Y;
  dp[0]=1;
  dp[1]=1+(arr[1]-arr[0]>=Y);
  int sum=0,cur=0;
  int fl=1;
  for(int i=2;i<n+1;i++){
    if(arr[i-1]-arr[i-2]<X){
    	fl=0;
    }
    while(cur<i-2&&arr[i]-arr[cur]>=Y&&(cur==0||arr[cur+1]-arr[cur-1]>=X)){ 
    	sum+=dp[cur++];
    }
    if(arr[i-1]-arr[i-2]<X){
     	sum=0,cur=i-2;
 	}
    dp[i]=fl+sum;
    if(arr[i]-arr[i-1]>=Y){ 
    	dp[i]+=dp[i-1];
    }
    if(arr[i]-arr[i-2]>=Y){
      if(i-2==0||arr[i-1]-arr[i-3]>=X){
        dp[i]+=dp[i-2];
   	  }
    }
    dp[i]%=mod;
  }
  cout<<dp[n];
  return 0;
}