N,M=map(int,raw_input().split()) A=map(int,raw_input().split()) sumA=sum(A) dp=[[0 for i in range(2*sumA+2)] for j in range(N+1)] dp[0][0]=1 mod=1234567891 while M>0: # think 2^i*A0, 2^i A1,... for j in range(N): # think 2^i*A[j] for k in range(2*sumA,-1,-1): dp[j+1][k]=dp[j][k] if k-A[j]>=0: dp[j+1][k]+=dp[j][k-A[j]] dp[j+1][k]%=mod for k in range(sumA+1): #if k*2+M%2 <=M: # print k*2+M%2, dp[N][k*2+M%2] dp[0][k]=dp[N][k*2+M%2] M/=2 print dp[0][0]