#define mod 1000000007 noktbl[1010][1010]; nok(n,k){ if(!noktbl[n][k]){ noktbl[n][k]=k==0||k==n?1:(nok(n-1,k)+nok(n-1,k-1))%mod; } return noktbl[n][k]; } pow(n,e){ return e?(e&1?n:1)*pow(n*n,e/2)%mod:1; } w[210];ln[210][210];li[210];u[210];a[210];ai; rtbl[1010][1010]; main(i,j,k,l,m,n,r,s,t){ scanf("%d%d",&n,&m); for(i=1;i<=n;++i)scanf("%d",w+i); for(k=0;k>8; l&=255; t=w[l]; if(s>=t){ if(!rtbl[s][t]){ long long h=0; for(i=1;i<=t;++i){ h=nok(t,i)*pow(i,s)-h; } rtbl[s][t]=h%mod; } r=(r+rtbl[s][t])%mod; } if(s>t)s=t; for(i=0;j=ln[l][i];++i){ if(!u[j]++){ a[ai++]=j|s<<8; } } } } printf("%d",r); return 0; }