#include "bits/stdc++.h"
using namespace std;

//諸機能
#pragma region MACRO 
#define putans(x)  std::cerr << "[ answer ]: " ; cout << (x) << endl
#define dputans(x) std::cerr << "[ answer ]: "; cout << setprecision(27) << (double)(x) << endl
#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)
#define RREP(i,a,n) for(int i=(int)(n-1); i>= a; i--)
#define rep(i,n) REP(i,0,n)
#define rrep(i,n) RREP(i,0,n)
#define all(a) begin((a)),end((a))
#define mp make_pair
#define exist(container, n) ((container).find((n)) != (container).end())
#define equals(a,b) (fabs((a)-(b)) < EPS)
#ifdef _DEBUG //ファイルからテストデータを読み込む
std::ifstream ifs("data.txt");
#define put ifs >>
#else //ジャッジシステムでいい感じにやる
#define put cin >>
#endif
#pragma endregion
//デバッグなどの支援
#pragma region CODING_SUPPORT
#ifdef _DEBUG
#define dbg(var0) { std::cerr << ( #var0 ) << "=" << ( var0 ) << endl; }
#define dbg2(var0, var1) { std::cerr << ( #var0 ) << "=" << ( var0 ) << ", "; dbg(var1); }
#define dbg3(var0, var1, var2) { std::cerr << ( #var0 ) << "=" << ( var0 ) << ", "; dbg2(var1, var2); }
#define dbgArray(a,n) {std::cerr << (#a) << "=";  rep(i,n){std::cerr <<(a[i])<<",";} cerr<<endl;} 
#else
#define dbg(var0) {}
#define dbg2(var0, var1) {}
#define dbg3(var0, var1, var2) {}
#define dbgArray(a,n) {}
#endif 
#pragma endregion 
//typedef（書き換える、書き足す可能性ある）
#pragma region TYPE_DEF
typedef long long ll;
typedef pair<int, int> pii; typedef pair<string, string> pss; typedef pair<int, string>pis;
typedef vector<string> vs; typedef vector<int> vi;
#pragma endregion
//諸々の定数(書き換える可能性ある)
#pragma region CONST_VAL
#define PI (2*acos(0.0))
#define EPS (1e-10)
#define MOD (ll)(1e9 + 7)
#define INF (ll)(2*1e9)
#pragma endregion



int main() {
	int n, a; put n >> a;
	vi x(n); rep(i, n) put x[i];

	ll dp[50+1][50+1][2500+1];
	rep(i, 51) {
		rep(j, 51) {
			rep(k, 2501) {
				dp[i][j][k] = 0;
			}
		}
	}
	int max = 0;
	dp[0][0][0] = 1;
	REP(i,0,n) {
		max += x[i];
		rep(j, i+1) {
			rep(k, max) {
				dp[i+1][j + 1][k + x[i]] += dp[i][j][k];
				dp[i + 1][j][k] += dp[i][j][k];
			}
		}
	}

	ll ret = 0;
	REP(i, n,n+1) {
		REP(j, 1 ,n+1) {
			ret += dp[i][j][a * j];
			dbg2(a*j,dp[i][j][a*j]);
		}
	}
	putans(ret);
END:
	return 0;
}

//
//vi v;
//vi w; ;
//ll nz1() {
//	return 0;
//}
//
//ll nz2() {
//	ll dp[201][1000*200+1];
//
//}
//
//ll nz3() {
//
//}
//	int n, wkazu; put n >> wkazu;
//	v.resize(200); 
//	w.resize(200);
//	rep(i, n) {
//		put v[i] >> w[i];
//	}

	//int h, w; put h >> w;
	//int map[100][100];
	//int ans[100][100];
	//rep(i, h) {
	//	string s; put s;
	//	rep(j, w) {
	//		map[i][j] = s[j] == '#' ? 1 : 0;
	//	}
	//}
	//int vx[9] = { 1,1,1,0,0,0,-1,-1,-1 };
	//int vy[9] = { 1,0,-1,1,0,-1,1,0,-1 };
	//rep(i, h) {
	//	rep(j, w) {
	//		int flag = 0;
	//		if (i  == 0 || i == h-1)flag++;
	//		if (j  == 0 || j == w-1)flag++;
	//		int match = flag == 0 ? 9 : ( flag == 1 ? 6 : 4 );
	//		int tester = 0;
	//		rep(k, 9) {
	//			if (i + vy[k] < 0 || i + vy[k] >= h) continue;
	//			if (j + vx[k] < 0 || j + vx[k] >= w) continue;
	//			tester += map[i+vy[k]][j+vx[k]];
	//		}
	//		if (tester == match) ans[i][j] = 1;
	//		else ans[i][j] = 0;
	//	}
	//}
	//int test[100][100] = { 0 };
	//rep(i, h) {
	//	rep(j, w) {
	//		if (ans[i][j] == 1) {
	//			rep(k, 9) {
	//				if (i + vy[k] < 0 || i + vy[k] >= h) continue;
	//				if (j + vx[k] < 0 || j + vx[k] >= w) continue;
	//				test[i + vy[k]][j + vx[k]] = 1;
	//			}
	//		}
	//	}
	//}
	//rep(i, h) {
	//	rep(j, w) {
	//		if ( test[i][j] != map[i][j] ) {
	//			cout << "impossible" << endl;
	//			goto END;
	//		}
	//	}
	//}
	//cout << "possible" << endl;
	//rep(i, h) {
	//	rep(j, w) {
	//		cout << ( ans[i][j] == 1 ? "#" : "." );
	//	}
	//	cout << endl;
	//}


//int n, m; put n >> m;
//string s1; put s1;
//string s2; put s2;
//int l1 = s1.size();
//int l2 = s2.size();
//int dp[1001][1001];
//rep(i, l1+1) {
//	dp[i][0] = i;
//}
//rep(i, l2+1) {
//	dp[0][i] = i;
//}
//rep(i, l1) {
//	rep(j, l2) {
//		int cost = (s1[i] == s2[j]) ? 0 : 1;
//		dp[i + 1][j + 1] = min(dp[i][j+1]+1,min(dp[i+1][j]+1,dp[i][j]+cost));
//	}
//}
//cout << dp[l1][l2] << endl;

Measured memory_bytes: 51072