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
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=100010,Mo=1000000007;
ll f[N],s[N];
inline ll gi() {
    ll x=0,o=1;
    char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
int main() {
    int n,p=0,ans=0,la=0;
    ll A,B;
    cin>>n>>A>>B;
    if(A<B) swap(A,B);
    s[0]=-1LL<<60,f[0]=1;
    for(int i=1,j=0;i<=n;i++) {
	s[i]=gi();
	if(i>1&&s[i]-s[i-2]<B) return puts("0"),0;
	while(s[i]-s[j]>=A) la=(la+f[j++])%Mo;
	f[i]=la;
	if(s[i]-s[i-1]<B) j=p=i-1,la=0;
    }
    while(p<=n) ans=(ans+f[p++])%Mo;
    cout<<ans;
    return 0;
}