#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
const int N = 100 + 10;
int a[N];
int n, x;
int dp[N][10010];
int f(int pos, int sum) {
if(sum == x) return 1; //porque encontre un conjunto de numeros que suman x
if(sum > x) return 0; //porque esta suma no me sirve
if(pos == n) return 0; //llego al final de los elementos sin sumar x
if(dp[pos][sum] == -1) {
int ans = 0;
ans = ans + f(pos + 1, sum + a[pos]); //tomo a[pos]
ans = ans + f(pos + 1, sum); //no tomo a[pos]
dp[pos][sum] = ans;
}
return dp[pos][sum];
}
int main () {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
cin >> n >> x;
for(int i = 0; i < n; i++)
cin >> a[i];
for(int i = 0; i < N; i++)
for(int j = 0; j < 10010; j++)
dp[i][j] = -1;
//memset(dp, -1, sizeof dp);
cout << f(0, 0) << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBOID0gMTAwICsgMTA7CmludCBhW05dOwppbnQgbiwgeDsKaW50IGRwW05dWzEwMDEwXTsKCmludCBmKGludCBwb3MsIGludCBzdW0pIHsKICAgIGlmKHN1bSA9PSB4KSByZXR1cm4gMTsgLy9wb3JxdWUgZW5jb250cmUgdW4gY29uanVudG8gZGUgbnVtZXJvcyBxdWUgc3VtYW4geAogICAgaWYoc3VtID4geCkgcmV0dXJuIDA7IC8vcG9ycXVlIGVzdGEgc3VtYSBubyBtZSBzaXJ2ZQogICAgaWYocG9zID09IG4pIHJldHVybiAwOyAvL2xsZWdvIGFsIGZpbmFsIGRlIGxvcyBlbGVtZW50b3Mgc2luIHN1bWFyIHgKICAgIAogICAgaWYoZHBbcG9zXVtzdW1dID09IC0xKSB7CiAgICAgICAgaW50IGFucyA9IDA7CiAgICAgICAgYW5zID0gYW5zICsgZihwb3MgKyAxLCBzdW0gKyBhW3Bvc10pOyAvL3RvbW8gYVtwb3NdCiAgICAgICAgYW5zID0gYW5zICsgZihwb3MgKyAxLCBzdW0pOyAvL25vIHRvbW8gYVtwb3NdCiAgICAgICAgZHBbcG9zXVtzdW1dID0gYW5zOwogICAgfQogICAgcmV0dXJuIGRwW3Bvc11bc3VtXTsKfQoKaW50IG1haW4gKCkgewogICAgI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgI2VuZGlmCiAgICBjaW4gPj4gbiA+PiB4OwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgCiAgICAgICAgY2luID4+IGFbaV07CgogICAgZm9yKGludCBpID0gMDsgaSA8IE47IGkrKykgCiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDEwMDEwOyBqKyspCiAgICAgICAgICAgIGRwW2ldW2pdID0gLTE7CiAgICAvL21lbXNldChkcCwgLTEsIHNpemVvZiBkcCk7CgogICAgY291dCA8PCBmKDAsIDApIDw8ICJcbiI7CgogICAgcmV0dXJuIDA7Cn0=