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:
/*
读题不规范，爆零两行泪。
数据不清空，爆零两行泪。
多测不读完，爆零两行泪。
边界不特判，爆零两行泪。
贪心不证明，爆零两行泪。
D P 顺序错，爆零两行泪。
大小少等号，爆零两行泪。
变量不统一，爆零两行泪。
越界不判断，爆零两行泪。
调试不注释，爆零两行泪。
溢出不 l l，爆零两行泪。
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1000000007,inf=0x3f3f3f3f3f3f3f3f;
const int N=100000;
int n,a,b;
int s[N+1];
int Sum[N+1][2];
int dp[N+1][2];
int lft[N+1][2];
int sum(int l,int r,bool tp){
	if(l>r)return 0;
	return (Sum[r][tp]-Sum[l-1][tp])%mod;
}
signed main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++)scanf("%lld",s+i);
	for(int i=1,ie;i<=n;i=ie+1){
		ie=i;while(ie+1<=n&&s[ie+1]-s[ie]>=a)ie++;
		for(int j=i;j<=ie;j++)lft[j][0]=i;
	}
	for(int i=1,ie;i<=n;i=ie+1){
		ie=i;while(ie+1<=n&&s[ie+1]-s[ie]>=b)ie++;
		for(int j=i;j<=ie;j++)lft[j][1]=i;
	}
	dp[0][0]=dp[0][1]=Sum[0][0]=Sum[0][1]=1;
	int las0=0,las1=0;
	s[0]=-inf,s[n+1]=inf;
	for(int i=1;i<=n;i++){
		while(las0+1<i&&s[las0+1]<=s[i+1]-a)las0++;
		while(las1+1<i&&s[las1+1]<=s[i+1]-b)las1++;
		dp[i][0]=sum(lft[i][0]-1,las1,1);
		dp[i][1]=sum(lft[i][1]-1,las0,0);
		Sum[i][0]=(Sum[i-1][0]+dp[i][0])%mod;
		Sum[i][1]=(Sum[i-1][1]+dp[i][1])%mod;
	}
	cout<<(dp[n][0]+dp[n][1]+10*mod)%mod;
	return 0;
}