#include <iostream>
#include <cstring>
#define MOD 1000000007
using namespace std;

int n, arr[101], k;long long int faktoriyel[100010];
long long int cvp=0;

int recursive(int konum, int last){
	if(konum==n)return 0;
	if(arr[konum]<k)cvp=(cvp+last*(faktoriyel[n+k-1-arr[konum]-1]*(fe(faktoriyel[n-1], MOD-2)*fe(faktoriyel[k-arr[konum]-1], MOD-2))+MOD)%MOD)%MOD;
	if(last==-1)return recursive(konum+1, -1);
	return recursive(konum+1, -1);
}

int dagit(int konum, int seker, int last){
	if(konum>=n)return 0;
	if(seker+arr[konum]>k)return dagit(konum+1, seker);
	if(seker+arr[konum]+1==k){
		cvp+=last;
	}else{
		cvp+=last*(faktoriyel[n+k-1-arr[konum]-1]/(faktoriyel[n-1]*faktoriyel[k-arr[konum]-1]));
	}
}

long long int fe(long long int b, long long int e){
	if(e==1)return b;
	if(e%2==0)return fe(b*b%MOD, e/2);
	return fe(b*b%MOD, e/2)*b%MOD;
}

int main(void){
	//ios_base::sync_with_stdio(false);
	//cin.tie(0);
	//cout.tie(0);
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>arr[i];
	}
	faktoriyel[0]=1;
	faktoriyel[1]=1;
	for(int i=1;i<=n+k;i++)faktoriyel[i+1]=((faktoriyel[i]*(i+1))%MOD);
	cvp=((faktoriyel[n+k-1]*fe(faktoriyel[n-1], MOD-2))%MOD *fe(faktoriyel[k], MOD-2))%MOD;
	recursive(0, -1);
	cout<<cvp;
	return 0;
}
3
113
023
122

21

10
6
3
