#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n,m,sum,ans=1;
int power(int a,int b){
    int ret=1;
    while(b){
        if(b&1) ret=1ll*ret*a%mod;
        a=1ll*a*a%mod; b>>=1;
    }
    return ret;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1,x;i<=n;i++){
        scanf("%d",&x);
        sum+=x;
    }
    if(sum>m){ puts("0"); return 0; }
    //${M+N}\choose {sum+N}$
    m+=n; sum+=n;
    //cout<<m<<" "<<sum<<endl;
    for(int i=1;i<=sum;i++)
        ans=1ll*ans*power(i,mod-2)%mod*(m-i+1)%mod;
    printf("%d\n",(ans+mod)%mod);
    return 0;
}
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define X first
#define Y second
#define y0 y12
#define y1 y22
#define INF 987654321
#define PI 3.141592653589793238462643383279502884
#define fup(i,a,b,c) for(int (i)=(a);(i)<=(b);(i)+=(c))
#define fdn(i,a,b,c) for(int (i)=(a);(i)>=(b);(i)-=(c))
#define MEM0(a) memset((a),0,sizeof(a))
#define MEM_1(a) memset((a),-1,sizeof(a))
#define ALL(a) a.begin(),a.end()
#define COMPRESS(a) sort(ALL(a));a.resize(unique(ALL(a))-a.begin())
#define SYNC ios_base::sync_with_stdio(false);cin.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef double db;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;
typedef pair<db, db> Pd;
typedef vector<int> Vi;
typedef vector<ll> Vll;
typedef vector<double> Vd;
typedef vector<Pi> VPi;
typedef vector<Pll> VPll;
typedef vector<Pd> VPd;
typedef tuple<int, int, int> iii;
typedef tuple<int,int,int,int> iiii;
typedef tuple<ll, ll, ll> LLL;
typedef vector<iii> Viii;
typedef vector<LLL> VLLL;
typedef complex<double> base;
const int MOD = 1000000007;
ll POW(ll a, ll b, ll MMM=MOD) {ll ret=1; for(;b;b>>=1,a=(a*a)%MMM)if(b&1)ret=(ret*a)% MMM; return ret; }
int dx[] = { 0,1,0,-1,1,1,-1,-1 }, dy[] = { 1,0,-1,0,1,-1,1,-1 };
int ddx[]={2,2,-2,-2,1,1,-1,-1},ddy[]={1,-1,1,-1,2,-2,2,-2};

ll nCr(int n,int r){
	if(r>n)return 0;
	ll res=1;
	fup(i,1,r,1){
		res=res*n--%MOD*POW(i,MOD-2)%MOD;
	}
	return res;
}
int main() {
	int n,m,s=0;
	scanf("%d%d",&n,&m);
	fup(i,1,n,1){
		int x;
		scanf("%d",&x);
		s+=x;
	}
	printf("%lld\n",nCr(n+m,n+s));
}