from collections import defaultdict N, M = map(int, input().split()) A = [int(x) for x in input().split()] mod = 1234567891 # dpi: i円払う方法の数 dp = defaultdict(int) dp[0] = 1 for x in range(10): # 各硬貨を、2**x 枚 使うか使わないか選ぶ for i in range(N): ndp = defaultdict(int) for m in dp: ndp[m + A[i] * 2 ** x] = (ndp[m + A[i] * 2 ** x] + dp[m]) % mod ndp[m] = (ndp[m] + dp[m]) % mod dp = ndp # 2**(x + 1)で割ったあまりがMと一致しないものは不要 keys = list(dp.keys()) for m in keys: if m % (2 ** (x + 1)) != M % (2 ** (x + 1)): dp.pop(m) print(dp[M])