using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, s) = (c[0], c[1]); var a = NList; var fh = GetList(s, a.Take(n / 2).ToList()); var sh = GetList(s, a.Skip(n / 2).ToList()); fh.Sort(); sh.Sort(); var pos = sh.Count - 1; var ans = 0L; for (var i = 0; i < fh.Count; ++i) { while (pos >= 0 && fh[i] + sh[pos] > s) --pos; ans += pos + 1; } WriteLine(ans); } static List GetList(int s, List a) { var ans = new List(); if (a.Count == 0) { ans.Add(0); return ans; } var len = new List[a.Count]; for (var i = 0; i < len.Length; ++i) { len[i] = new List(); len[i].Add(1); var tmp = 1L; while (tmp * a[i] <= s) { len[i].Add((int)tmp * a[i]); tmp *= a[i]; } } var bitmax = 1; foreach (var li in len) bitmax *= li.Count; for (var b = 1; b < bitmax; ++b) { var tmp = b; var flg = true; var sum = 0L; for (var i = 0; i < len.Length; ++i) { if (tmp % len[i].Count == 0) { flg = false; break; } sum += len[i][tmp % len[i].Count]; tmp /= len[i].Count; } if (flg && sum <= s) ans.Add((int)sum); } return ans; } }