#include <bits/stdc++.h>
 
using namespace std;
 
#define Long long long
#define bint __int128
#define _3bkarm cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);
 
#include <ext/pb_ds/assoc_container.hpp>
 
using namespace __gnu_pbds;
 
struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        x = x + 0x9e3779b97f4a7c15;
        x = ( x ^ (x >> 30) ) * 0xbf58476d1ce4e5b9;
        x = ( x ^ (x >> 27) ) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }
 
    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};
 
template <class K, class V> using HT = gp_hash_table<K, V, custom_hash>;
 
void get_shit_done() {
    int n, x;
    cin >> n >> x;
 
    vector<int> t(n);
    for (int i = 0; i < n; ++i) {
        cin >> t[i];
    }
 
    int l = n / 2, r = (n + 1) / 2;
 
    HT<Long, int> freqLeft;
    for (int mask = 0; mask < (1 << l); ++mask) {
        Long sum = 0;
        bitset<50> bt(mask);
        for (int i = 0; i < l; ++i) {
            if (bt[i]) {
                sum += t[i];
            }
        }
        ++freqLeft[sum];
    }
 
    Long ans = 0;
    for (int mask = 0; mask < (1 << r); ++mask) {
        Long sum = 0;
        bitset<50> bt(mask);
        for (int i = l; i < n; ++i) {
            if (bt[i - l]) {
                sum += t[i];
            }
        }
        ans += freqLeft[x - sum];
    }
 
    cout << ans;
}
 
signed main() {
    _3bkarm
 
    int ts = 1;
//    cin >> ts;
    while (ts--) {
        get_shit_done();
    }
 
    return 0;
}