Problem:
Score : 100 points

Problem Statement

There are N children, numbered 1, 2, \ldots, N.

They have decided to share K candies among themselves.
Here, for each i (1 \leq i \leq N), Child i must receive between 0 and a_i candies (inclusive).
Also, no candies should be left over.

Find the number of ways for them to share candies, modulo 10^9 + 7.
Here, two ways are said to be different when there exists a child who receives a different number of candies.

Constraints

All values in input are integers.

1 \leq N \leq 100

0 \leq K \leq 10^5

0 \leq a_i \leq K

Input

Input is given from Standard Input in the following format:

N K
a_1 a_2 \ldots a_N

Output

Print the number of ways for the children to share candies, modulo 10^9 + 7.

Sample Input 1

3 4
1 2 3

Sample Output 1

5

There are five ways for the children to share candies, as follows:

(0, 1, 3)

(0, 2, 2)

(1, 0, 3)

(1, 1, 2)

(1, 2, 1)

Here, in each sequence, the i-th element represents the number of candies that Child i receives.

Sample Input 2

1 10
9

Sample Output 2

0

There may be no ways for the children to share candies.

Sample Input 3

2 0
0 0

Sample Output 3

1

There is one way for the children to share candies, as follows:

(0, 0)

Sample Input 4

4 100000
100000 100000 100000 100000

Sample Output 4

665683269

Be sure to print the answer modulo 10^9 + 7.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

	#include<bits/stdc++.h>
	using namespace std;
	typedef long long int ll;
	#define pb push_back
	#define mp make_pair
	#define sz(a) ll(a.size())
	#define trace(c,x) for(auto &x:c)
	#define F first
	#define S second		
	ll mod = 1e9 + 7;   //change acc to question

ll fastexpo(ll x,ll y)
{
	ll a=1;
	while(y>0)
	{
		if(y&1)a = (a*x)%mod;
		y/=2;
		x=(x*x)%mod;
	}	
	return a;
}

ll dp[103][100005];
ll a[103];
int n;


int main()
{

	ios::sync_with_stdio(false);
	int k;
	cin>>n>>k;
	for(int i=0;i<n;i++)
		cin>>a[i];
	
	for(int i=0;i<n;i++)
		dp[i][0] = 1;

	for(int i=1;i<=a[0];i++)
		dp[0][i] = 1 ;
	for(int i=1;i<=k;i++)
		dp[0][i]  = (dp[0][i-1]+dp[0][i])%mod ;


	for(int i=1;i<n;i++)
	{
		for(int j=1;j<=k;j++)
		{
			int lim = min(ll(j),a[i]);
			if(lim==j)
				dp[i][j] = dp[i-1][j];
			else
				dp[i][j] = dp[i-1][j] - dp[i-1][j-lim-1];
		}	
		for(int j=1;j<=k;j++)
			dp[i][j] = (dp[i][j] + dp[i][j-1])%mod;	
	}	
	if(k==0)
		cout<<dp[n-1][k]<<endl;
	else
		cout<<dp[n-1][k]-dp[n-1][k-1]<<endl;

	return 0;

	}