#include <iostream>
using namespace std;
int G_N;
int G_S;
int G_sequence[21];
int G_Result = 0;
bool visited[21] = {false, };
void DFS(int dest, int cnt = 0, int n = 1){
if (cnt == dest) {
int tmp = 0;
for (int i = 1; i <= G_N; i++) {
if (visited[i]) tmp += G_sequence[i];
}
if (tmp == G_S) ++G_Result;
return;
}
for (int i = n; i <= G_N; i++) {
if (!visited[i]) {
visited[i] = true;
DFS(dest, cnt + 1, i + 1);
visited[i] = false;
}
}
}
void Sol() {
for (int i = 1; i <= G_N; i++) {
DFS(i);
}
}
int main() {
cin >> G_N >> G_S;
for (int i = 1; i <= G_N; i++) {
cin >> G_sequence[i];
}
Sol();
cout << G_Result;
}