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 JAVA):

Solution:
import java.util.*;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		final long MOD = 1000000007;
		int N = sc.nextInt();
		long A = sc.nextLong();
		long B = sc.nextLong();
		if(A>B) {
			long temp = A;
			A = B;
			B = temp;
		}
		long[] S = new long[N+1];
		S[0] = -(B+1);
		for(int i=0; i<N; i++)
			S[i+1] = sc.nextLong();
		
		for(int i=2; i<N+1; i++) {
			if(S[i]-S[i-2]<A) {
				System.out.println(0);
				sc.close();
				return;
			}
		}
		
		long[] dp = new long[N+1];
		dp[0] = 1;
		
		int idxZero = 0;
		int idxB = 0;
		long sum = 0;
		for(int i=1; i<=N; i++) {
			while(S[i] - S[idxB]>=B) {
				sum = (sum + dp[idxB])%MOD;
				idxB++;
			}
			dp[i] = sum;
			if(S[i]-S[i-1]<A) {
				while(idxZero<i-1) {
					if(idxZero<idxB)
						sum = (sum - dp[idxZero] + MOD)%MOD;
					dp[idxZero]=0;
					idxZero++;
				}
			}
		}

		long ans = 0;
		for(int i=0; i<N+1; i++)
			ans = (ans + dp[i])%MOD;
		System.out.println(ans);
		
		sc.close();
	}
}