#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MOD = 1e9 + 7;
ll dp[1000005]; // dp[i] = số cách tạo tổng i
ll a[105];
int n, k;
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a + 1, a + n + 1); // đảm bảo thứ tự tăng dần
dp[0] = 1; // Có 1 cách để tạo tổng 0 (không chọn gì)
for (int i = 1; i <= n; i++) { // duyệt từng loại đồng xu theo thứ tự tăng dần
for (int j = a[i]; j <= k; j++) { // từ a[i] đến k
dp[j] = (dp[j] + dp[j - a[i]]) % MOD;
}
}
cout << dp[k];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CgpsbCBkcFsxMDAwMDA1XTsgLy8gZHBbaV0gPSBz4buRIGPDoWNoIHThuqFvIHThu5VuZyBpCmxsIGFbMTA1XTsKaW50IG4sIGs7CgppbnQgbWFpbigpIHsKICAgIGNpbiA+PiBuID4+IGs7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOwogICAgc29ydChhICsgMSwgYSArIG4gKyAxKTsgLy8gxJHhuqNtIGLhuqNvIHRo4bupIHThu7EgdMSDbmcgZOG6p24KCiAgICBkcFswXSA9IDE7IC8vIEPDsyAxIGPDoWNoIMSR4buDIHThuqFvIHThu5VuZyAwIChraMO0bmcgY2jhu41uIGfDrCkKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsgICAgICAgICAvLyBkdXnhu4d0IHThu6tuZyBsb+G6oWkgxJHhu5NuZyB4dSB0aGVvIHRo4bupIHThu7EgdMSDbmcgZOG6p24KICAgICAgICBmb3IgKGludCBqID0gYVtpXTsgaiA8PSBrOyBqKyspIHsgIC8vIHThu6sgYVtpXSDEkeG6v24gawogICAgICAgICAgICBkcFtqXSA9IChkcFtqXSArIGRwW2ogLSBhW2ldXSkgJSBNT0Q7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgZHBba107Cn0K