#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> a(n + 1); // 用于存储每种花的最大数量
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
// 动态规划数组,初始化为0,使用 vector 容器更方便
vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
// 初始状态,只有0盆花时有1种方案
// for (int i = 0; i <= m; i++) {
// dp[0][i] = 1;
// }
dp[0][0]=1;
// 动态规划状态转移
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++) {
// 用前i-1种花的方案数初始化
dp[i][j] = dp[i-1][j];
// 再考虑第i种花可以摆放的数量
for (int k = 1; k <= a[i] && k <= j; k++) {
dp[i][j] = dp[i][j] + dp[i-1][j-k];
}
}
}
// 输出最终结果
cout << dp[n][m] << endl;
// for(int i=0;i<=n;i++)
// {
// for(int j=0;j<=m;j++)
// {
// cout<<dp[i][j]<<" ";
// }
// cout<<endl;
// }
return 0;
}