N, A = list(map(int, input().split()))

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



max_num = max(x)

max_num = max(A, max_num)

# x_jまでからk枚選んで合計がｓになる選び方の総数。ｓはk*Aにすれば平均がAになる

dp = [[[0 for _ in range(max_num * N + 1)] for _ in range(N + 1)] for _ in range(N + 1)]

#何も選ばないで平均が０

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



for j in range(N+1):

  for k in range(j+1):

    for s in range(max_num * k + 1):

      if j >= 1 and s < x[j - 1]:

        # j番目を選んでk+1個を選んだ際に平均がAにならない場合

        dp[j][k][s] = dp[j - 1][k][s]

      elif j >= 1 and k >= 1 and s >= x[j - 1]:

        # j番目をえらんでk+1個選んで平均がAになるものがあるなら、j-1番までの合計はs-x_j-1なので、その数を足している

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

 



ans = 0

# 合計がkAになるものを加算

for k in range(1, N + 1):

  ans += dp[N][k][k*A]

print(ans)
from collections import Counter

N,A = list(map(int, input().split()))

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



"""

普通にやると最大で2**50通りなのでTLE

i枚選んだ時に合計がi*Aになる物を考えるとよい



"""



# 0枚からN枚まで選んで、合計値がkeyでその組み合わせの数がvalue

dp = [Counter() for _ in range(N+1)]

dp[0][0] = 1



for i, a in enumerate(X): # i番目のカードまで選べる

    for j in reversed(list(range(i+1))): # j枚選ぶとき（０～i枚の範囲）、逆順にしないと１枚目にX_iを選んで３枚目にもX_iを選ぶみたいな重複が発生するのでこれを回避するために逆順にする

        for k,v in list(dp[j].items()): # j枚選んだ時の合計値とその組み合わせの個数についてみていく

            dp[j+1][k+a] += v # j+1枚目としてi番目のカードを選ぶ時に合計がk+aになる個数は、j枚選んでｋになる個数と同じ（それぞれの場合にaを足してできる）



ans = 0

for i, C in enumerate(dp):

    if i >= 1:

        ans += C[i*A]

print(ans)
N, A = list(map(int, input().split()))
x = list(map(int, input().split()))
max_num = max(x)
max_num = max(A, max_num)
# x_jまでからk枚選んで合計がｓになる選び方の総数。ｓはk*Aにすれば平均がAになる
dp = [[[0 for _ in range(max_num * N + 1)] for _ in range(N + 1)] for _ in range(N + 1)]
# 何も選ばないで平均が０
dp[0][0][0] = 1
for j in range(N + 1):
    for k in range(j + 1):
        for s in range(max_num * k + 1):
            if j >= 1 and s < x[j - 1]:
                # j番目を選んでk+1個を選んだ際に平均がAにならない場合
                dp[j][k][s] = dp[j - 1][k][s]
            elif j >= 1 and k >= 1 and s >= x[j - 1]:
                # j番目をえらんでk+1個選んで平均がAになるものがあるなら、j-1番までの合計はs-x_j-1なので、その数を足している
                dp[j][k][s] = dp[j - 1][k][s] + dp[j - 1][k - 1][s - x[j - 1]]
ans = 0
# 合計がkAになるものを加算
for k in range(1, N + 1):
    ans += dp[N][k][k * A]
print(ans)

from collections import Counter

N, A = list(map(int, input().split()))
X = list(map(int, input().split()))
"""
普通にやると最大で2**50通りなのでTLE
i枚選んだ時に合計がi*Aになる物を考えるとよい
"""
# 0枚からN枚まで選んで、合計値がkeyでその組み合わせの数がvalue
dp = [Counter() for _ in range(N + 1)]
dp[0][0] = 1
for i, a in enumerate(X):  # i番目のカードまで選べる
    for j in reversed(
        list(range(i + 1))
    ):  # j枚選ぶとき（０～i枚の範囲）、逆順にしないと１枚目にX_iを選んで３枚目にもX_iを選ぶみたいな重複が発生するのでこれを回避するために逆順にする
        for k, v in list(dp[j].items()):  # j枚選んだ時の合計値とその組み合わせの個数についてみていく
            dp[j + 1][
                k + a
            ] += v  # j+1枚目としてi番目のカードを選ぶ時に合計がk+aになる個数は、j枚選んでｋになる個数と同じ（それぞれの場合にaを足してできる）
ans = 0
for i, C in enumerate(dp):
    if i >= 1:
        ans += C[i * A]
print(ans)

+from collections import Counter + -x = list(map(int, input().split())) -max_num = max(x) -max_num = max(A, max_num) -# x_jまでからk枚選んで合計がｓになる選び方の総数。ｓはk*Aにすれば平均がAになる -dp = [[[0 for _ in range(max_num * N + 1)] for _ in range(N + 1)] for _ in range(N + 1)] -# 何も選ばないで平均が０ -dp[0][0][0] = 1 -for j in range(N + 1): -    for k in range(j + 1): -        for s in range(max_num * k + 1): -            if j >= 1 and s < x[j - 1]: -                # j番目を選んでk+1個を選んだ際に平均がAにならない場合 -                dp[j][k][s] = dp[j - 1][k][s] -            elif j >= 1 and k >= 1 and s >= x[j - 1]: -                # j番目をえらんでk+1個選んで平均がAになるものがあるなら、j-1番までの合計はs-x_j-1なので、その数を足している -                dp[j][k][s] = dp[j - 1][k][s] + dp[j - 1][k - 1][s - x[j - 1]] +X = list(map(int, input().split())) +""" +普通にやると最大で2**50通りなのでTLE +i枚選んだ時に合計がi*Aになる物を考えるとよい +""" +# 0枚からN枚まで選んで、合計値がkeyでその組み合わせの数がvalue +dp = [Counter() for _ in range(N + 1)] +dp[0][0] = 1 +for i, a in enumerate(X):  # i番目のカードまで選べる +    for j in reversed( +        list(range(i + 1)) +    ):  # j枚選ぶとき（０～i枚の範囲）、逆順にしないと１枚目にX_iを選んで３枚目にもX_iを選ぶみたいな重複が発生するのでこれを回避するために逆順にする +        for k, v in list(dp[j].items()):  # j枚選んだ時の合計値とその組み合わせの個数についてみていく +            dp[j + 1][ +                k + a +            ] += v  # j+1枚目としてi番目のカードを選ぶ時に合計がk+aになる個数は、j枚選んでｋになる個数と同じ（それぞれの場合にaを足してできる） -# 合計がkAになるものを加算 -for k in range(1, N + 1): -    ans += dp[N][k][k * A] +for i, C in enumerate(dp): +    if i >= 1: +        ans += C[i * A]