#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for(int i = a; i < n; i++)
#define rrep(i, a, n) for(int i = a; i >= n; i--)
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
// constexpr ll MOD = 1000000007;
constexpr ll MOD = 998244353;
constexpr int IINF = 1001001001;
constexpr ll INF = 1LL<<60;

template<class t,class u> void chmax(t&a,u b){if(a<b)a=b;}
template<class t,class u> void chmin(t&a,u b){if(b<a)a=b;}

vector<ll> msetToVec(multiset<ll> &s){
    vector<ll> res;
    for(auto ss: s){
        res.push_back(ss);
    }

    return res;
}

int main(){
    ll n, s; cin >> n >> s;
    vector<ll> a(8);
    rep(i, 0, n) cin >> a[i];

    multiset<ll> b, c;
    b.insert(0);
    c.insert(0);
    rep(i, 0, 4){
        if(a[i] == 0) continue;
        multiset<ll> b_;
        
        for(auto bb: b){
            ll tmp = a[i];
            while(tmp <= s){
                if(bb+tmp <= s) b_.insert(bb+tmp);
                tmp *= a[i];
            }
        }
        b = b_;
    }
    rep(i, 4, 8){
        if(a[i] == 0) continue;
        multiset<ll> c_;
        
        for(auto cc: c){
            ll tmp = a[i];
            while(tmp <= s){
                if(cc+tmp <= s) c_.insert(cc+tmp);
                tmp *= a[i];
            }
        }
        c = c_;
    }
    vector<ll> B = msetToVec(b), C = msetToVec(c);
    ll ans = 0;
    for(auto bb: B){
        ll tmp = C.end() - upper_bound(C.begin(), C.end(), s-bb);
        ans += C.size()-tmp;
    }
    cout << ans << endl;
    
    return 0;
}