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>
using namespace std;

const int mod = 1e9 + 7;

struct BinaryIndexedTree {
  BinaryIndexedTree(size_t n) : n(n), v(n + 1, 0) {}

  size_t n;
  vector<int64_t> v;

  int64_t sum(int k) {
    int ret = 0;
    for (; k; k -= k & -k) (ret += v[k]) %= mod;
    return ret;
  }

  void add(int k, int64_t x) {
    for (; k <= n; k += k & -k) (v[k] += x) %= mod;
  }
};

int main() {
  int n;
  int64_t a, b;
  cin >> n >> a >> b;

  const int64_t infll = 1001001001001001001ll;
  vector<int64_t> s(n + 1);

  s[0] = -infll;
  for (int i = 1; i <= n; ++i) {
    cin >> s[i];
  }

  if (a > b) swap(a, b);

  BinaryIndexedTree bit(n + 1);
  bit.add(1, 1);

  int idx = 1;
  for (int i = 1; i <= n; ++i) {
    int r = upper_bound(s.begin(), s.end(), s[i] - b) - s.begin();

    int64_t t = 0;
    if (r >= idx) t = (bit.sum(r) - bit.sum(idx - 1) + mod) % mod;
    if (s[i] - s[i - 1] < a) idx = i;
    if (2 <= i && s[i] - s[i - 2] < a) idx = i + 1;

    bit.add(i + 1, t);
  }

  cout << (n >= idx ? (bit.sum(n + 1) - bit.sum(idx - 1) + mod) % mod : 0) << endl;
}