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<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<string>
#include<string.h>
#include<vector>
#include<set>
#include<map>
#include<stdlib.h>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
long long c[110000];
int las[110000];
long long dp[110000];
long long bit[110000];
long long sum(int a,int b){
	if(a)return (sum(0,b)+mod-sum(0,a-1))%mod;
	long long ret=0;
	for(;b>=0;b=(b&(b+1))-1)ret+=bit[b];
	return ret%mod;
}
void add(int a,long long b){
	for(;a<110000;a|=a+1)bit[a]=(bit[a]+b)%mod;
}
int main(){
	int a;
	long long x,y;
	scanf("%d%lld%lld",&a,&x,&y);
	for(int i=0;i<a;i++){
		scanf("%lld",c+i);
	}
	if(x>y)swap(x,y);
	for(int i=2;i<a;i++){
		if(c[i]-c[i-2]<x){
			printf("0\n");return 0;
		}
	}
	int now=0;
	for(int i=0;i<a;i++){
		las[i+1]=now;
		if(c[i+1]-c[i]<x)now=i+1;
	}
	dp[0]=1;
	add(0,1);
	for(int i=1;i<=a;i++){
		int at=upper_bound(c,c+a,c[i-1]-y)-c;
 
		long long tmp=0;
		if(las[i-1]<=at)tmp=sum(las[i-1],at);
		dp[i]=tmp;
		add(i,tmp);
	//	printf("%d: %d %d %lld\n",i,at,las[i-1],dp[i]);
	}
	long long ret=0;
	for(int i=las[a];i<=a;i++)ret+=dp[i];
	ret%=mod;
	printf("%lld\n",ret);
}