#include<iostream>
using namespace std;
#define f 1000007
int main()
{
//状态转移方程:f(i,j)=f(i-1,j-0)+f(i-1,j-1)+...+f(i-1,j-a[i]);
//i:种前i种花
//j:共种就j朵花
//第i朵花种几朵
int n, m, a[105] = { 0 }, dp[105][105] = { 0 };
//输入
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
if (a[i] == 0)//保证a[i]大于0
{
i--;
n--;
}
}
for (int i = 0; i <= a[1]; i++)dp[1][i] = 1;//初始化
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
for (int z = 0; z <= a[i]; z++)
{
if (j - z >= 0)
{
dp[i][j] += dp[i - 1][j - z];//第i种花种z朵
dp[i][j] = dp[i][j] % f;//取模
}
else break;
}
}
}
cout << dp[n][m] << endl;//输出
return 0;
}