#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;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
if (a < 0) a += MOD;
}
int n, k;
int a[N];
int dp[N][K]; // dp[i][j] = Số cách chia j cây kẹo cho i đứa trẻ đầu tiên
int sum[N][K]; // sum[i][j] = Tổng các dp[i][1] + dp[i][2] + ... + dp[i][j]
int getSum(int i, int lj, int rj) {
int ans = sum[i][rj];
if (lj - 1 >= 0) add(ans, -sum[i][lj - 1]);
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
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++) add(sum[i][j], sum[i][j - 1]);
}
cout << dp[n][k] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTIgKyA1OyAKY29uc3QgaW50IEsgPSAxZTUgKyA1OyAKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7ICAKCnZvaWQgYWRkKGludCYgYSwgaW50IGIpIHsKCWEgKz0gYjsgCglpZiAoYSA+PSBNT0QpIGEgLT0gTU9EOyAKCWlmIChhIDwgMCkgYSArPSBNT0Q7IAp9CgppbnQgbiwgazsgIAppbnQgYVtOXTsgCmludCBkcFtOXVtLXTsgIC8vIGRwW2ldW2pdID0gU+G7kSBjw6FjaCBjaGlhIGogY8OieSBr4bq5byBjaG8gaSDEkeG7qWEgdHLhursgxJHhuqd1IHRpw6puIAppbnQgc3VtW05dW0tdOyAvLyBzdW1baV1bal0gPSBU4buVbmcgY8OhYyBkcFtpXVsxXSArIGRwW2ldWzJdICsgLi4uICsgZHBbaV1bal0KCmludCBnZXRTdW0oaW50IGksIGludCBsaiwgaW50IHJqKSB7CglpbnQgYW5zID0gc3VtW2ldW3JqXTsgCglpZiAobGogLSAxID49IDApIGFkZChhbnMsIC1zdW1baV1bbGogLSAxXSk7ICAKCXJldHVybiBhbnM7ICAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgIAkKCWNpbiA+PiBuID4+IGs7IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsgIAoKCWRwWzBdWzBdID0gMTsgICAKCWZvciAoaW50IGogPSAwOyBqIDw9IGs7IGorKykgc3VtWzBdW2pdID0gMTsgCgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKSB7CgkJCS8vIGZvciAoaW50IHggPSAwOyB4IDw9IGFbaV07IHgrKykgewoJCQkvLyAJaWYgKGogLSB4ID49IDApIGFkZChkcFtpXVtqXSwgZHBbaSAtIDFdW2ogLSB4XSk7IAoJCQkvLyB9CgkJCWRwW2ldW2pdID0gZ2V0U3VtKGkgLSAxLCBqIC0gYVtpXSwgaik7IAoJCQlzdW1baV1bal0gPSBkcFtpXVtqXTsgCgkJfQogCQogCQlmb3IgKGludCBqID0gMTsgaiA8PSBrOyBqKyspIGFkZChzdW1baV1bal0sIHN1bVtpXVtqIC0gMV0pOyAKCX0KCgljb3V0IDw8IGRwW25dW2tdIDw8ICdcbic7IAp9