#agc009c. [agc009_c]Division into Two

[agc009_c]Division into Two

問題文

相異なる整数 NN 個からなる集合があります。この集合の ii 番目に小さい要素は SiS_i です。この集合を X,YX,Y22 つの集合に分割し、

  • XX に属するどの相異なる 22 つの要素も、その差の絶対値が AA 以上
  • YY に属するどの相異なる 22 つの要素も、その差の絶対値が BB 以上

になるようにしたいです。このような分割としてありうるものの個数を 109+710^9 + 7 で割ったあまりを求めてください。ただし、X,YX,Y のうち一方が空となるような分割も数えます。

制約

  • 入力はすべて整数である。
  • 1N1051 ≦ N ≦ 10^5
  • 1A,B10181 ≦ A , B ≦ 10^{18}
  • 0Si1018(1iN)0 ≦ S_i ≦ 10^{18}(1 ≦ i ≦ N)
  • Si<Si+1(1iN1)S_i < S_{i+1}(1 ≦ i ≦ N - 1)

入力

入力は以下の形式で標準入力から与えられる。

NN AA BB S1S_1 : SNS_N

出力

条件を満たす分割の個数を 109+710^9 + 7 で割ったあまりを出力せよ。


入力例 1

5 3 7
1
3
6
9
12

出力例 1

5

次の 55 通りの分割方法があります。

  • X=X={1,6,9,121,6,9,12}, Y=Y={33}
  • X=X={1,6,91,6,9}, Y=Y={3,123,12}
  • X=X={3,6,9,123,6,9,12}, Y=Y={11}
  • X=X={3,6,93,6,9}, Y=Y={1,121,12}
  • X=X={3,6,123,6,12}, Y=Y={1,91,9}

入力例 2

7 5 3
0
2
4
7
8
11
15

出力例 2

4

入力例 3

8 2 9
3
4
5
13
15
22
26
32

出力例 3

13

入力例 4

3 3 4
5
6
7

出力例 4

0