// Slower C++ solution:
//In the name of God

#include<bits/stdc++.h>

#define int long long



using namespace std;



int n , A , a[60] , dp[60][60][3000];



int32_t main(){

        ios_base::sync_with_stdio(false);

        cin.tie(0);

        cout.tie(0);

        cin >> n >> A;

        for(int i=1 ; i <= n ; i++)

                cin >> a[i];

        dp[0][0][0] = 1;

        for(int i=1 ; i <= n ; i++){

                dp[i][0][0] = 1;

                for(int j=1 ; j <= i ; j++)

                        for(int k=1 ; k < 2800 ; k++){

                                dp[i][j][k] = dp[i-1][j][k];

                                if(k >= a[i])

                                        dp[i][j][k] += dp[i-1][j-1][k - a[i]];

                        }

        }

        int res = 0;

        for(int i=1 ; i <= n ; i++)

                res += dp[n][i][i*A];

        cout << res;

} 

// Faster C++ solution for the same problem (measured speedup: 1.4517241211096212x):
#include <iostream>

#include <cstdio>

#include <cstring>

#include <algorithm>

#include <cmath>

#include <queue>

#include <stack>

#include <map>

#include <set>

#include <vector>

#include <iomanip>

#define ALL(x) (x).begin(), (x).end()

#define rt return

#define dll(x) scanf("%I64d",&x)

#define xll(x) printf("%I64d\n",x)

#define sz(a) int(a.size())

#define all(a) a.begin(), a.end()

#define rep(i,x,n) for(int i=x;i<n;i++)

#define repd(i,x,n) for(int i=x;i<=n;i++)

#define pii pair<int,int>

#define pll pair<long long ,long long>

#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

#define MS0(X) memset((X), 0, sizeof((X)))

#define MSC0(X) memset((X), '\0', sizeof((X)))

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define eps 1e-6

#define gg(x) getInt(&x)

#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;

using namespace std;

typedef long long ll;

ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}

ll lcm(ll a,ll b){return a/gcd(a,b)*b;}

ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}

inline void getInt(int* p);

const int maxn=1000010;

const int inf=0x3f3f3f3f;

/*** TEMPLATE CODE * * STARTS HERE ***/

ll dp[55][55*55];

int k;

int n;

int main()

{

    //freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);

    //freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);

    gbtb;

    cin>>n>>k;

    int x;

    dp[0][0]=1ll;

    repd(i,1,n)

    {

        cin>>x;

        for(int j=i-1;j>=0;j--)

        {

            for(int w=0;w<=55*j;w++)

            {

                dp[j+1][w+x]+=dp[j][w];

            }

        }

    }

    ll ans=0ll;

    repd(i,1,n)

    {

        ans+=dp[i][i*k];

    }

    cout<<ans<<endl;





    return 0;

}



inline void getInt(int* p) {

    char ch;

    do {

        ch = getchar();

    } while (ch == ' ' || ch == '\n');

    if (ch == '-') {

        *p = -(getchar() - '0');

        while ((ch = getchar()) >= '0' && ch <= '9') {

            *p = *p * 10 - ch + '0';

        }

    }

    else {

        *p = ch - '0';

        while ((ch = getchar()) >= '0' && ch <= '9') {

            *p = *p * 10 + ch - '0';

        }

    }

}