#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e2 + 5;
const int K = 1e5 + 5;
const int MOD = 1e9 + 7;
int n, k;
int a[N];
int dp[N][K]; // dp[i][j] = xét đến đứa trẻ thứ i và chia j cây kẹo
int sum[N][K]; // sum[i][j] = tổng các dp[i][1] + dp[i][2] + ... + dp[i][j]
int add(int a, int b) {
int ans = (a + b) % MOD;
if (ans < 0) ans += MOD;
return ans;
}
int getSum(int i, int lj, int rj) {
int ans = sum[i][rj];
if (lj - 1 >= 0) ans = add(ans, -sum[i][lj - 1]);
return ans;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
dp[0][0] = 1;
for (int j = 0; j <= k; j++) sum[0][j] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= k; j++) {
// for (int x = 0; x <= a[i]; x++) {
// if (j - x >= 0) add(dp[i][j], dp[i - 1][j - x]);
// }
dp[i][j] = getSum(i - 1, j - a[i], j);
sum[i][j] = dp[i][j];
}
for (int j = 1; j <= k; j++) sum[i][j] = add(sum[i][j], sum[i][j - 1]);
}
cout << dp[n][k] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlMiArIDU7IApjb25zdCBpbnQgSyA9IDFlNSArIDU7IApjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsgIAoKaW50IG4sIGs7ICAKaW50IGFbTl07IAppbnQgZHBbTl1bS107IC8vIGRwW2ldW2pdID0geMOpdCDEkeG6v24gxJHhu6lhIHRy4bq7IHRo4bupIGkgdsOgIGNoaWEgaiBjw6J5IGvhurlvIAppbnQgc3VtW05dW0tdOyAvLyBzdW1baV1bal0gPSB04buVbmcgY8OhYyBkcFtpXVsxXSArIGRwW2ldWzJdICsgLi4uICsgZHBbaV1bal0KCmludCBhZGQoaW50IGEsIGludCBiKSB7CglpbnQgYW5zID0gKGEgKyBiKSAlIE1PRDsKCWlmIChhbnMgPCAwKSBhbnMgKz0gTU9EOyAKCXJldHVybiBhbnM7ICAKfQoKaW50IGdldFN1bShpbnQgaSwgaW50IGxqLCBpbnQgcmopIHsKCWludCBhbnMgPSBzdW1baV1bcmpdOyAKCWlmIChsaiAtIDEgPj0gMCkgYW5zID0gYWRkKGFucywgLXN1bVtpXVtsaiAtIDFdKTsgIAoJcmV0dXJuIGFuczsgIAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gazsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAgCgoJZHBbMF1bMF0gPSAxOyAgIAoJZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKSBzdW1bMF1bal0gPSAxOyAKCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8PSBrOyBqKyspIHsKCQkJLy8gZm9yIChpbnQgeCA9IDA7IHggPD0gYVtpXTsgeCsrKSB7CgkJCS8vIAlpZiAoaiAtIHggPj0gMCkgYWRkKGRwW2ldW2pdLCBkcFtpIC0gMV1baiAtIHhdKTsgCgkJCS8vIH0KCQkJZHBbaV1bal0gPSBnZXRTdW0oaSAtIDEsIGogLSBhW2ldLCBqKTsgCgkJCXN1bVtpXVtqXSA9IGRwW2ldW2pdOyAKCQl9CiAJCiAJCWZvciAoaW50IGogPSAxOyBqIDw9IGs7IGorKykgc3VtW2ldW2pdID0gYWRkKHN1bVtpXVtqXSwgc3VtW2ldW2ogLSAxXSk7IAoJfQoKCWNvdXQgPDwgZHBbbl1ba10gPDwgJ1xuJzsgCn0=