#include using namespace std; void dfs(vector &X, vector &P, int S, int p){ if (p == X.size()){ P.push_back(S); } else { long long x = 1; while (true){ x *= X[p]; if (S + x > 1000000000){ break; } dfs(X, P, S + x, p + 1); } } } int main(){ int n, S; cin >> n >> S; vector a(n); for (int i = 0; i < n; i++){ cin >> a[i]; } vector X, Y; for (int i = 0; i < n / 2; i++){ X.push_back(a[i]); } for (int i = n / 2; i < n; i++){ Y.push_back(a[i]); } vector P; dfs(X, P, 0, 0); vector Q; dfs(Y, Q, 0, 0); sort(P.begin(), P.end()); sort(Q.begin(), Q.end()); int cnt = P.size(); long long ans = 0; for (int i = 0; i < cnt; i++){ ans += upper_bound(Q.begin(), Q.end(), S - P[i]) - Q.begin(); } cout << ans << endl; }