#!usr/bin/env python3

from collections import defaultdict, deque, Counter, OrderedDict

from bisect import bisect_left, bisect_right

from functools import reduce, lru_cache

from heapq import heappush, heappop, heapify



import itertools

import math, fractions

import sys, copy



def L(): return sys.stdin.readline().split()

def I(): return int(sys.stdin.readline().rstrip())

def SL(): return list(sys.stdin.readline().rstrip())

def LI(): return [int(x) for x in sys.stdin.readline().split()]

def LI1(): return [int(x) - 1 for x in sys.stdin.readline().split()]

def LS(): return [list(x) for x in sys.stdin.readline().split()]

def R(n): return [sys.stdin.readline().strip() for _ in range(n)]

def LR(n): return [L() for _ in range(n)]

def IR(n): return [I() for _ in range(n)]

def LIR(n): return [LI() for _ in range(n)]

def LIR1(n): return [LI1() for _ in range(n)]

def SLR(n): return [SL() for _ in range(n)]

def LSR(n): return [LS() for _ in range(n)]



def perm(n, r): return math.factorial(n) // math.factorial(r)

def comb(n, r): return math.factorial(n) // (math.factorial(r) * math.factorial(n-r))



def make_list(n, *args, default=0): return [make_list(*args, default=default) for _ in range(n)] if args else [default for _ in range(n)]



dire = [[1, 0], [0, 1], [-1, 0], [0, -1]]

dire8 = [[1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1]]

alphabets = "abcdefghijklmnopqrstuvwxyz"

ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

MOD = 1000000007

INF = float("inf")



sys.setrecursionlimit(1000000)



def main():

    N, A = LI()

    X = LI()



    dp = make_list(N+1, N+1, 2501)

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



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

        for k in range(i+1):

            for s in range(2501):

                if X[i-1] > s:

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

                else:

                    dp[i][k][s] = dp[i-1][k][s] + dp[i-1][k-1][s-X[i-1]]



    print((sum(dp[N][k][k * A] for k in range(1, N+1))))





if __name__ == '__main__':

    main()
#!usr/bin/env python3

from collections import defaultdict, deque, Counter, OrderedDict

from bisect import bisect_left, bisect_right

from functools import reduce, lru_cache

from heapq import heappush, heappop, heapify



import itertools

import math, fractions

import sys, copy



def L(): return sys.stdin.readline().split()

def I(): return int(sys.stdin.readline().rstrip())

def SL(): return list(sys.stdin.readline().rstrip())

def LI(): return [int(x) for x in sys.stdin.readline().split()]

def LI1(): return [int(x) - 1 for x in sys.stdin.readline().split()]

def LS(): return [list(x) for x in sys.stdin.readline().split()]

def R(n): return [sys.stdin.readline().strip() for _ in range(n)]

def LR(n): return [L() for _ in range(n)]

def IR(n): return [I() for _ in range(n)]

def LIR(n): return [LI() for _ in range(n)]

def LIR1(n): return [LI1() for _ in range(n)]

def SLR(n): return [SL() for _ in range(n)]

def LSR(n): return [LS() for _ in range(n)]



def perm(n, r): return math.factorial(n) // math.factorial(r)

def comb(n, r): return math.factorial(n) // (math.factorial(r) * math.factorial(n-r))



def make_list(n, *args, default=0): return [make_list(*args, default=default) for _ in range(n)] if args else [default for _ in range(n)]



dire = [[1, 0], [0, 1], [-1, 0], [0, -1]]

dire8 = [[1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1]]

alphabets = "abcdefghijklmnopqrstuvwxyz"

ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

MOD = 1000000007

INF = float("inf")



sys.setrecursionlimit(1000000)



def main():

    N, A = LI()

    X = LI()

    Y = [xi - A for xi in X]

    z = max(A, max(X))



    dp = make_list(N+1, 2*z*N+1)

    dp[0][z*N] = 1



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

        for s in range(2*z*N+1):

            if 0 <= s - Y[i-1] <= 2*z*N:

                dp[i][s] = dp[i-1][s] + dp[i-1][s - Y[i-1]]

            else:

                dp[i][s] = dp[i-1][s]



    print((dp[-1][z*N]-1))





if __name__ == '__main__':

    main()
#!usr/bin/env python3
from collections import defaultdict, deque, Counter, OrderedDict
from bisect import bisect_left, bisect_right
from functools import reduce, lru_cache
from heapq import heappush, heappop, heapify
import itertools
import math, fractions
import sys, copy


def L():
    return sys.stdin.readline().split()


def I():
    return int(sys.stdin.readline().rstrip())


def SL():
    return list(sys.stdin.readline().rstrip())


def LI():
    return [int(x) for x in sys.stdin.readline().split()]


def LI1():
    return [int(x) - 1 for x in sys.stdin.readline().split()]


def LS():
    return [list(x) for x in sys.stdin.readline().split()]


def R(n):
    return [sys.stdin.readline().strip() for _ in range(n)]


def LR(n):
    return [L() for _ in range(n)]


def IR(n):
    return [I() for _ in range(n)]


def LIR(n):
    return [LI() for _ in range(n)]


def LIR1(n):
    return [LI1() for _ in range(n)]


def SLR(n):
    return [SL() for _ in range(n)]


def LSR(n):
    return [LS() for _ in range(n)]


def perm(n, r):
    return math.factorial(n) // math.factorial(r)


def comb(n, r):
    return math.factorial(n) // (math.factorial(r) * math.factorial(n - r))


def make_list(n, *args, default=0):
    return (
        [make_list(*args, default=default) for _ in range(n)]
        if args
        else [default for _ in range(n)]
    )


dire = [[1, 0], [0, 1], [-1, 0], [0, -1]]
dire8 = [[1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1]]
alphabets = "abcdefghijklmnopqrstuvwxyz"
ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
MOD = 1000000007
INF = float("inf")
sys.setrecursionlimit(1000000)


def main():
    N, A = LI()
    X = LI()
    dp = make_list(N + 1, N + 1, 2501)
    dp[0][0][0] = 1
    for i in range(1, N + 1):
        for k in range(i + 1):
            for s in range(2501):
                if X[i - 1] > s:
                    dp[i][k][s] = dp[i - 1][k][s]
                else:
                    dp[i][k][s] = dp[i - 1][k][s] + dp[i - 1][k - 1][s - X[i - 1]]
    print((sum(dp[N][k][k * A] for k in range(1, N + 1))))


if __name__ == "__main__":
    main()

#!usr/bin/env python3
from collections import defaultdict, deque, Counter, OrderedDict
from bisect import bisect_left, bisect_right
from functools import reduce, lru_cache
from heapq import heappush, heappop, heapify
import itertools
import math, fractions
import sys, copy


def L():
    return sys.stdin.readline().split()


def I():
    return int(sys.stdin.readline().rstrip())


def SL():
    return list(sys.stdin.readline().rstrip())


def LI():
    return [int(x) for x in sys.stdin.readline().split()]


def LI1():
    return [int(x) - 1 for x in sys.stdin.readline().split()]


def LS():
    return [list(x) for x in sys.stdin.readline().split()]


def R(n):
    return [sys.stdin.readline().strip() for _ in range(n)]


def LR(n):
    return [L() for _ in range(n)]


def IR(n):
    return [I() for _ in range(n)]


def LIR(n):
    return [LI() for _ in range(n)]


def LIR1(n):
    return [LI1() for _ in range(n)]


def SLR(n):
    return [SL() for _ in range(n)]


def LSR(n):
    return [LS() for _ in range(n)]


def perm(n, r):
    return math.factorial(n) // math.factorial(r)


def comb(n, r):
    return math.factorial(n) // (math.factorial(r) * math.factorial(n - r))


def make_list(n, *args, default=0):
    return (
        [make_list(*args, default=default) for _ in range(n)]
        if args
        else [default for _ in range(n)]
    )


dire = [[1, 0], [0, 1], [-1, 0], [0, -1]]
dire8 = [[1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1]]
alphabets = "abcdefghijklmnopqrstuvwxyz"
ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
MOD = 1000000007
INF = float("inf")
sys.setrecursionlimit(1000000)


def main():
    N, A = LI()
    X = LI()
    Y = [xi - A for xi in X]
    z = max(A, max(X))
    dp = make_list(N + 1, 2 * z * N + 1)
    dp[0][z * N] = 1
    for i in range(1, N + 1):
        for s in range(2 * z * N + 1):
            if 0 <= s - Y[i - 1] <= 2 * z * N:
                dp[i][s] = dp[i - 1][s] + dp[i - 1][s - Y[i - 1]]
            else:
                dp[i][s] = dp[i - 1][s]
    print((dp[-1][z * N] - 1))


if __name__ == "__main__":
    main()

-    dp = make_list(N + 1, N + 1, 2501) -    dp[0][0][0] = 1 +    Y = [xi - A for xi in X] +    z = max(A, max(X)) +    dp = make_list(N + 1, 2 * z * N + 1) +    dp[0][z * N] = 1 -        for k in range(i + 1): -            for s in range(2501): -                if X[i - 1] > s: -                    dp[i][k][s] = dp[i - 1][k][s] -                else: -                    dp[i][k][s] = dp[i - 1][k][s] + dp[i - 1][k - 1][s - X[i - 1]] -    print((sum(dp[N][k][k * A] for k in range(1, N + 1)))) +        for s in range(2 * z * N + 1): +            if 0 <= s - Y[i - 1] <= 2 * z * N: +                dp[i][s] = dp[i - 1][s] + dp[i - 1][s - Y[i - 1]] +            else: +                dp[i][s] = dp[i - 1][s] +    print((dp[-1][z * N] - 1))