import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.Vector;
public class Main {
static final long mod=1000000007;
public static void main(String[] args) {
long a[]=new long[20];
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
long s=sc.nextLong();
for(int i=0;i<n;i++)
a[i]=sc.nextLong();
int len=(1<<n);
long ans=0;
for(int i=0;i<len;i++){
long x=s;
int flag=1;
for(int j=0;j<n;j++)
if(((i>>j)&1)==1){
flag*=-1;
x-=a[j]+1;
}
if(x<0)
continue;
ans=(ans+flag*lucas(x+n-1,n-1))%mod;
ans=(ans+mod)%mod;
}
System.out.println(ans);
}
static long lucas(long a,long b){
if(b==0)
return 1;
return getc(a%mod,b%mod)*lucas(a/mod,b/mod)%mod;
}
static long getc(long a,long b){
if(a<b)
return 0;
long ans=1;
for(long i=a-b+1;i<=a;i++)
ans=ans*i%mod;
long t=1;
for(long i=1;i<=b;i++)
t=t*i%mod;
return ans*qpow(t,mod-2)%mod;
}
static long qpow(long a,long b){
long ans=1;
while(b!=0){
if((b&1)==1){
ans=a*ans%mod;
}
a=a*a%mod;
b>>=1;
}
return ans;
}
}
codeforces 451 E Devu and Flowers
猜你喜欢
转载自blog.csdn.net/chaoweilanmao/article/details/50987848
今日推荐
周排行