吃面包
题号:NC54255
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 64 M,其他语言128 M
64bit IO Format: %lld

题目描述

在校赛期间各位 ACM 大佬的帮助下,zzz终于成功解决了买面包的问题,获得了 SZ 市 IT 牌面包店的至尊权限。想吃什么面包,就买什么面包。

现在,zzz迷上了一款奶油面包,不是说面包有多好吃,而是奶油的吸引力太强。而这款奶油面包也有着自己的独特之处:它的奶油分布并不是均匀的,而是随机在面包内某处分布有部分奶油。

由于zzz刚跟他的队友吃完羊排,吃不下面包,但是又抵挡不住奶油的诱惑,所以想要用吸管吸奶油,为了便于不浪费太多时间,zzz又向Enal大魔法师借了一副魔法眼镜,获得到透视的功能,能够清晰地看见面包内部某个位置存在多少奶油,假定1克奶油能够提供给zzz 1点饱腹感,那么,在zzz不会撑死的前提下,求能够使zzz获得最大饱腹感的不同奶油吸取方案数,由于数量可能很大,所以请将答案对 109 + 7 取模。

输入描述:

第一行输入两个整数用空格隔开 n, m, 表示zzz通过透视眼镜发现面包内一共有 n 处存在奶油(这 n 出奶油各自独立,两两不相连),zzz再获得超过 m 点饱腹感就有撑死的风险。

接来下 n 行,每行一个整数 g,表示某个位置存在 g 克奶油(如果zzz一旦选择某个位置开始吸奶油,则一定会吸完)。

0 < n, m, g ≤ 1000

输出描述:

输出一个整数,表示方案数对 109 + 7 取模的结果。
示例1

输入

复制
4 5
1
2
3
5

输出

复制
2

说明

zzz可以吃第二个位置和第三个位置的奶油获得5点饱腹感,也可以只吃第四个位置获得5点饱腹感,所以一共有两种方案。