Problem:
Score : 300 points

Problem Statement

Tak has N cards. On the i-th (1 \leq i \leq N) card is written an integer x_i.
He is selecting one or more cards from these N cards, so that the average of the integers written on the selected cards is exactly A.
In how many ways can he make his selection?

Constraints

1 \leq N \leq 50

1 \leq A \leq 50

1 \leq x_i \leq 50

N,\,A,\,x_i are integers.

Partial Score

200 points will be awarded for passing the test set satisfying 1 \leq N \leq 16.

Input

The input is given from Standard Input in the following format:

N A
x_1 x_2 ... x_N

Output

Print the number of ways to select cards such that the average of the written integers is exactly A.

Sample Input 1

4 8
7 9 8 9

Sample Output 1

5

The following are the 5 ways to select cards such that the average is 8:

Select the 3-rd card.

Select the 1-st and 2-nd cards.

Select the 1-st and 4-th cards.

Select the 1-st, 2-nd and 3-rd cards.

Select the 1-st, 3-rd and 4-th cards.

Sample Input 2

3 8
6 6 9

Sample Output 2

0

Sample Input 3

8 5
3 6 2 8 7 6 5 9

Sample Output 3

19

Sample Input 4

33 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

Sample Output 4

8589934591

The answer may not fit into a 32-bit integer.

Solution in C++14 (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

# include <iostream>
# include <algorithm>
# include <vector>
# include <string>
# include <set>
# include <map>
# include <cmath>
# include <iomanip>
# include <functional>
# include <utility>
# include <stack>
# include <queue>
# include <list>
# include <bitset>
# include <complex>
#include<limits.h>
#include<deque>
#include<cstdio>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N = 1000000;
const int mod = 998244353;
const ll INF = 1LL << 60;
#define rep(i,n) for(ll i=(ll)0;i<(ll)n;++i)
#define ALL(x) x.begin(),x.end()
#define pp pair<ll,ll>
#define fi first
#define se second
#define pb push_back
#define fix(n) fixed<<setprecision(n)
#define itr vector<ll>::iterator
ll n, a, in[55];
vector<ll>v2[51];
vector<pp>v;
int main() {
	cin >> n >> a;
	rep(i, n)cin >> in[i];
	rep(i, 1 << (n / 2)) {
		ll ct = 0,num=0;
		rep(j, n / 2)if (1 & (i >> j))++ct, num += in[j];
		v.pb(pp{ num,ct });
	}
	rep(i, 1<<(n + 1) / 2) {
		ll ct = 0,num = 0;
		rep(j, (n + 1) / 2)if (1 & (i >> j))++ct, num += in[n / 2 + j];
		v2[ct].pb(num);
	}
	rep(i, n/2+2)sort(ALL(v2[i]));
	//rep(i, 51)rep(j, v2[i].size())cout <<"v2"<< i << "," << j << "," << v2[i][j] << endl;
	ll ans = 0;
	rep(i, v.size()) {
		rep(j, n/2+2) {
			if (i == 0 && j == 0)continue;
			ans += (upper_bound(ALL(v2[j]), (v[i].se + j)*a - v[i].fi) - lower_bound(ALL(v2[j]), (v[i].se + j)*a - v[i].fi));
			//cout << v[i].fi <<","<<j<< "," << ans << endl;
		}
		
	}
	cout << ans << endl;
	return 0;
}