#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
template<typename T>
bool maximize(T& a, const T& b) {
if (b < a) return false;
a = b;
return true;
}
const int INF = 1e9;
const ll LINF = 1e18;
// dp knapsack
// Biến thể: mỗi món vật có thể được chọn nhiều lần và thứ tự chọn có quan trọng
// ví dụ 2 2 5 khác với 2 5 2
const int N = 1e2 + 5;
const int S = 1e6 + 5;
const int MOD = 1e9 + 7;
int n, s;
int w[N];
int dp[S];
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> s;
for (int i = 1; i <= n; i++) {
cin >> w[i];
}
dp[0] = 1;
// O(n * S)
for (int j = 0; j <= s; j++) {
for (int i = 1; i <= n; i++) {
// chọn món vật thứ i
if (j - w[i] >= 0) {
(dp[j] += dp[j - w[i]]) %= MOD;
}
}
}
cout << dp[s] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpib29sIG1heGltaXplKFQmIGEsIGNvbnN0IFQmIGIpIHsKCWlmIChiIDwgYSkgcmV0dXJuIGZhbHNlOyAKCWEgPSBiOyAKCXJldHVybiB0cnVlOyAKfQoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKLy8gZHAga25hcHNhY2sKLy8gQmnhur9uIHRo4buDOiBt4buXaSBtw7NuIHbhuq10IGPDsyB0aOG7gyDEkcaw4bujYyBjaOG7jW4gbmhp4buBdSBs4bqnbiB2w6AgdGjhu6kgdOG7sSBjaOG7jW4gY8OzIHF1YW4gdHLhu41uZyAKLy8gdsOtIGThu6UgMiAyIDUga2jDoWMgduG7m2kgMiA1IDIgIAoKY29uc3QgaW50IE4gPSAxZTIgKyA1OyAKY29uc3QgaW50IFMgPSAxZTYgKyA1OyAgICAKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7IAoKaW50IG4sIHM7ICAKaW50IHdbTl07ICAKaW50IGRwW1NdOyAgCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gczsgIAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJY2luID4+IHdbaV07IAoJfSAKCglkcFswXSA9IDE7ICAgCgkvLyBPKG4gKiBTKQoJZm9yIChpbnQgaiA9IDA7IGogPD0gczsgaisrKSB7CgkJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJCS8vIGNo4buNbiBtw7NuIHbhuq10IHRo4bupIGkgIAoJCQlpZiAoaiAtIHdbaV0gPj0gMCkgewoJCQkJKGRwW2pdICs9IGRwW2ogLSB3W2ldXSkgJT0gTU9EOyAgCgkJCX0KCQl9Cgl9CgoJY291dCA8PCBkcFtzXSA8PCAnXG4nOyAKfQ==