n,a=list(map(int,input().split()))

x=list(map(int,input().split()))



dp=[[[0]*(a*n+1) for i in range(n+1)] for i in range(n+1)]

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

#dp[i番目のカード][選んだ枚数][数の合計]=何組あるか

for i in range(n):

    for j in range(n):

        for k in range(a*n+1):

            if k+x[i]<=a*n:

                #i番目を入れる場合

                dp[i+1][j+1][k+x[i]]+=dp[i][j][k]

            #いれない場合

            dp[i+1][j][k]+=dp[i][j][k]

ans=0

cnt=0

#print(*dp,sep='\n')

for i in dp[-1]:

    ans+=i[cnt*a]

    cnt+=1

print((ans-1))
n,a=list(map(int,input().split()))

x=list(map(int,input().split()))



dp=[[[0]*(n*50+1) for i in range(n+1)] for i in range(n)]

#dp[i][j][k]=i番目まででj枚のカードを選んだ時の合計がkになる組み合わせ

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

dp[0][1][x[0]]=1

for i in range(1,n):

    for j in range(n+1):

        for k in range(n*50+1):

            if dp[i-1][j][k]==0:continue

            #入れるとき

            dp[i][j+1][k+x[i]]+=dp[i-1][j][k]

            #入れない時

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



ans=0

for j in range(1,n+1):

    for k in range(n*50+1):

        if a*j==k:

            ans+=dp[-1][j][k]

print(ans)

#print(*dp[-1],sep='\n')
n, a = list(map(int, input().split()))
x = list(map(int, input().split()))
dp = [[[0] * (a * n + 1) for i in range(n + 1)] for i in range(n + 1)]
dp[0][0][0] = 1
# dp[i番目のカード][選んだ枚数][数の合計]=何組あるか
for i in range(n):
    for j in range(n):
        for k in range(a * n + 1):
            if k + x[i] <= a * n:
                # i番目を入れる場合
                dp[i + 1][j + 1][k + x[i]] += dp[i][j][k]
            # いれない場合
            dp[i + 1][j][k] += dp[i][j][k]
ans = 0
cnt = 0
# print(*dp,sep='\n')
for i in dp[-1]:
    ans += i[cnt * a]
    cnt += 1
print((ans - 1))

n, a = list(map(int, input().split()))
x = list(map(int, input().split()))
dp = [[[0] * (n * 50 + 1) for i in range(n + 1)] for i in range(n)]
# dp[i][j][k]=i番目まででj枚のカードを選んだ時の合計がkになる組み合わせ
dp[0][0][0] = 1
dp[0][1][x[0]] = 1
for i in range(1, n):
    for j in range(n + 1):
        for k in range(n * 50 + 1):
            if dp[i - 1][j][k] == 0:
                continue
            # 入れるとき
            dp[i][j + 1][k + x[i]] += dp[i - 1][j][k]
            # 入れない時
            dp[i][j][k] += dp[i - 1][j][k]
ans = 0
for j in range(1, n + 1):
    for k in range(n * 50 + 1):
        if a * j == k:
            ans += dp[-1][j][k]
print(ans)
# print(*dp[-1],sep='\n')

-dp = [[[0] * (a * n + 1) for i in range(n + 1)] for i in range(n + 1)] +dp = [[[0] * (n * 50 + 1) for i in range(n + 1)] for i in range(n)] +# dp[i][j][k]=i番目まででj枚のカードを選んだ時の合計がkになる組み合わせ -# dp[i番目のカード][選んだ枚数][数の合計]=何組あるか -for i in range(n): -    for j in range(n): -        for k in range(a * n + 1): -            if k + x[i] <= a * n: -                # i番目を入れる場合 -                dp[i + 1][j + 1][k + x[i]] += dp[i][j][k] -            # いれない場合 -            dp[i + 1][j][k] += dp[i][j][k] +dp[0][1][x[0]] = 1 +for i in range(1, n): +    for j in range(n + 1): +        for k in range(n * 50 + 1): +            if dp[i - 1][j][k] == 0: +                continue +            # 入れるとき +            dp[i][j + 1][k + x[i]] += dp[i - 1][j][k] +            # 入れない時 +            dp[i][j][k] += dp[i - 1][j][k] -cnt = 0 -# print(*dp,sep='\n') -for i in dp[-1]: -    ans += i[cnt * a] -    cnt += 1 -print((ans - 1)) +for j in range(1, n + 1): +    for k in range(n * 50 + 1): +        if a * j == k: +            ans += dp[-1][j][k] +print(ans) +# print(*dp[-1],sep='\n')