"""

普通に数え上げDPで行けそう

dp[i][j][k] ->　カードをi枚使う/j種類目のカードまで見る/カードの数字の合計がkになる

j種類目のカードを使う場合：

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

j種類目のカードを使わない場合：

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



という風に計算していって、最終的に各iごとにk/i=Aとなるようなkを見出して、dp[i][-1][k]をanswerとして加算する。

"""

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

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

sumX = sum(X)

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

for j in range(N+1):

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

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

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

        x = X[j-1]

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

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

            if k-x >= 0:

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

ans = 0

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

    target = A*i

    if target <= sumX:

        ans += dp[i][-1][target]



print(ans)



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

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

Y = [x-A for x in X]

t = sum(X)

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

#dp[i][j] -> i枚目まで見る。合計をj-tにするパターン数

#i枚目を使う場合 -> dp[i][j] += dp[i-1][j-Yi]

#i枚目を使わない場合 -> dp[i][j] += dp[i-1][j]

dp[0][t] = 1



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

    y = Y[i-1]

    for j in range(t*2+1):

        if 0 <= j-y <= t*2:

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

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



print((dp[-1][t]-1))
"""
普通に数え上げDPで行けそう
dp[i][j][k] ->　カードをi枚使う/j種類目のカードまで見る/カードの数字の合計がkになる
j種類目のカードを使う場合：
dp[i][j][k] += dp[i-1][j-1][k-x]
j種類目のカードを使わない場合：
dp[i][j][k] += dp[i][j-1][k]
という風に計算していって、最終的に各iごとにk/i=Aとなるようなkを見出して、dp[i][-1][k]をanswerとして加算する。
"""
N, A = list(map(int, input().split()))
X = list(map(int, input().split()))
sumX = sum(X)
dp = [[[0] * (sumX + 1) for _ in range(N + 1)] for _ in range(N + 1)]
for j in range(N + 1):
    dp[0][j][0] = 1
for i in range(1, N + 1):
    for j in range(1, N + 1):
        x = X[j - 1]
        for k in range(1, sumX + 1):
            dp[i][j][k] += dp[i][j - 1][k]
            if k - x >= 0:
                dp[i][j][k] += dp[i - 1][j - 1][k - x]
ans = 0
for i in range(1, N + 1):
    target = A * i
    if target <= sumX:
        ans += dp[i][-1][target]
print(ans)

N, A = list(map(int, input().split()))
X = list(map(int, input().split()))
Y = [x - A for x in X]
t = sum(X)
dp = [[0] * (t * 2 + 1) for _ in range(N + 1)]
# dp[i][j] -> i枚目まで見る。合計をj-tにするパターン数
# i枚目を使う場合 -> dp[i][j] += dp[i-1][j-Yi]
# i枚目を使わない場合 -> dp[i][j] += dp[i-1][j]
dp[0][t] = 1
for i in range(1, N + 1):
    y = Y[i - 1]
    for j in range(t * 2 + 1):
        if 0 <= j - y <= t * 2:
            dp[i][j] += dp[i - 1][j - y]
        dp[i][j] += dp[i - 1][j]
print((dp[-1][t] - 1))

-""" -普通に数え上げDPで行けそう -dp[i][j][k] ->　カードをi枚使う/j種類目のカードまで見る/カードの数字の合計がkになる -j種類目のカードを使う場合： -dp[i][j][k] += dp[i-1][j-1][k-x] -j種類目のカードを使わない場合： -dp[i][j][k] += dp[i][j-1][k] -という風に計算していって、最終的に各iごとにk/i=Aとなるようなkを見出して、dp[i][-1][k]をanswerとして加算する。 -""" -sumX = sum(X) -dp = [[[0] * (sumX + 1) for _ in range(N + 1)] for _ in range(N + 1)] -for j in range(N + 1): -    dp[0][j][0] = 1 +Y = [x - A for x in X] +t = sum(X) +dp = [[0] * (t * 2 + 1) for _ in range(N + 1)] +# dp[i][j] -> i枚目まで見る。合計をj-tにするパターン数 +# i枚目を使う場合 -> dp[i][j] += dp[i-1][j-Yi] +# i枚目を使わない場合 -> dp[i][j] += dp[i-1][j] +dp[0][t] = 1 -    for j in range(1, N + 1): -        x = X[j - 1] -        for k in range(1, sumX + 1): -            dp[i][j][k] += dp[i][j - 1][k] -            if k - x >= 0: -                dp[i][j][k] += dp[i - 1][j - 1][k - x] -ans = 0 -for i in range(1, N + 1): -    target = A * i -    if target <= sumX: -        ans += dp[i][-1][target] -print(ans) +    y = Y[i - 1] +    for j in range(t * 2 + 1): +        if 0 <= j - y <= t * 2: +            dp[i][j] += dp[i - 1][j - y] +        dp[i][j] += dp[i - 1][j] +print((dp[-1][t] - 1))