#CF626F. Group Projects

Group Projects

F. 分组项目

一个班级中有 nn 个学生正在做小组项目。学生们将分成若干组(有些组可能只有一个人),各自完成自己的独立部分,然后再一起讨论结果。第 ii 个学生完成自己的独立部分需要 aia_i 分钟。

如果学生们的工作速度不同,那么对于较快的学生来说可能会感到沮丧,而对于较慢的学生来说则会感到压力。特别地,一个组的 不平衡度 定义为该组中最大的 aia_i 减去最小的 aia_i。注意:只有一名学生的组,其不平衡度为 00

请问有多少种将学生分成若干组的方式,使得所有组的不平衡度之和 不超过 kk

如果存在一对学生在一种分组中属于同一组,而在另一种分组中不属于同一组,则这两种分组被视为不同。

输入格式

第一行包含两个用空格分隔的整数 nnkk1n2001 \le n \le 2000k10000 \le k \le 1000)—— 分别表示学生人数以及允许的最大总不平衡度。

第二行包含 nn 个用空格分隔的整数 aia_i1ai5001 \le a_i \le 500)—— 第 ii 个学生完成独立部分所需的时间。

输出格式

输出一个整数,表示满足条件的分组方式数量。由于答案可能很大,请输出其对 109+710^9+7 取模后的值。

样例

样例输入 1

3 2
2 4 5

样例输出 1

3

样例输入 2

4 3
7 8 9 10

样例输出 2

13

样例输入 3

4 0
5 10 20 21

样例输出 3

1

样例解释

在第一个样例中,有三种可行的分组方式:

  • 第 1 个学生和第 2 个学生组成一组,第 3 个学生单独一组。总不平衡度为 2+0=22 + 0 = 2
  • 第 1 个学生单独一组,第 2 个学生和第 3 个学生组成一组。总不平衡度为 0+1=10 + 1 = 1
  • 三个学生都各自单独成组。总不平衡度为 00

在第三个样例中,总不平衡度必须为 00,因此每个学生都必须单独成组。