#agc009c. [agc009_c]Division into Two

[agc009_c]Division into Two

问题描述

有一个由 NN 个不同整数组成的集合。这个集合中第 ii 小的元素是 SiS_i。我们想将这个集合分为两个集合 XXYY,使得:

  • XX 中任意两个不同元素的绝对差值大于等于 AA
  • YY 中任意两个不同元素的绝对差值大于等于 BB

有多少种满足条件的分割方式,结果取模 109+710^9 + 7?注意 XXYY 中可能有一个为空的情况。

约束条件

  • 所有输入值都是整数。
  • 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

有五种分割方式:

  • 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