#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define initial first
#define added second
#define sort_all(v) sort(v.begin(), v.end())
#define ya_sayed_ya_badawy \
ios_base::sync_with_stdio(false); \
cin.tie(NULL);
const int MAX = 100 + 50;
const int MAX_N = 1e5 + 50;
int MOD = 1e9 + 7;
const int OO = 1e9;
const double EPS = (double)1e-9;
int add(ll a, ll b)
{
return ((a % MOD) + (b % MOD)) % MOD;
}
int mul(ll a, ll b)
{
return ((a % MOD) * (b % MOD)) % MOD;
}
int n, sum;
int v[MAX];
void solve()
{
cin >> n >> sum;
for (int i = 0; i < n; i++)
{
cin >> v[i];
}
int dp[n + 1][sum + 1] = {};
dp[n][0] = 1;
for (int idx = n - 1; idx >= 0; idx--)
{
for (int s = 0; s <= sum; s++)
{
for (int i = 0; i <= v[idx]; i++)
{
if (sum - i >= 0)
{
dp[idx][s] = add(dp[idx][s], dp[idx + 1][s - i]);
}
}
}
}
cout << dp[0][sum];
}
signed main()
{
ya_sayed_ya_badawy int t = 1;
// cin >> t;
while (t--)
{
solve();
// cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgaW5pdGlhbCBmaXJzdAojZGVmaW5lIGFkZGVkIHNlY29uZAojZGVmaW5lIHNvcnRfYWxsKHYpIHNvcnQodi5iZWdpbigpLCB2LmVuZCgpKQoKI2RlZmluZSB5YV9zYXllZF95YV9iYWRhd3kgICAgICAgICAgICBcCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgXAogICAgY2luLnRpZShOVUxMKTsKCmNvbnN0IGludCBNQVggPSAxMDAgKyA1MDsKY29uc3QgaW50IE1BWF9OID0gMWU1ICsgNTA7CmludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgT08gPSAxZTk7CmNvbnN0IGRvdWJsZSBFUFMgPSAoZG91YmxlKTFlLTk7CgppbnQgYWRkKGxsIGEsIGxsIGIpCnsKICAgIHJldHVybiAoKGEgJSBNT0QpICsgKGIgJSBNT0QpKSAlIE1PRDsKfQoKaW50IG11bChsbCBhLCBsbCBiKQp7CiAgICByZXR1cm4gKChhICUgTU9EKSAqIChiICUgTU9EKSkgJSBNT0Q7Cn0KCmludCBuLCBzdW07CmludCB2W01BWF07CgoKdm9pZCBzb2x2ZSgpCnsKCiAgICBjaW4gPj4gbiA+PiBzdW07CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IHZbaV07CiAgICB9CgogICAgaW50IGRwW24gKyAxXVtzdW0gKyAxXSA9IHt9OwogICAgZHBbbl1bMF0gPSAxOwoKICAgIGZvciAoaW50IGlkeCA9IG4gLSAxOyBpZHggPj0gMDsgaWR4LS0pCiAgICB7CiAgICAgICAgZm9yIChpbnQgcyA9IDA7IHMgPD0gc3VtOyBzKyspCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSB2W2lkeF07IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHN1bSAtIGkgPj0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkcFtpZHhdW3NdID0gYWRkKGRwW2lkeF1bc10sIGRwW2lkeCArIDFdW3MgLSBpXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBkcFswXVtzdW1dOwp9CgpzaWduZWQgbWFpbigpCnsKICAgIHlhX3NheWVkX3lhX2JhZGF3eSBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKCiAgICB3aGlsZSAodC0tKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICAgICAgLy8gY291dCA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0=