open Printf
let input_int_array n =
	Array.init n (fun _ -> Scanf.scanf " %d" (fun v -> v))

let get_int () = Scanf.scanf " %d" (fun v -> v)
let get_2_ints () = Scanf.scanf " %d %d" (fun u v -> u,v)
let get_3_ints () = Scanf.scanf " %d %d %d" (fun u v w -> u,v,w)
let get_4_ints () = Scanf.scanf " %d %d %d %d" (fun u v w x -> u,v,w,x)
let get_5_ints () = Scanf.scanf " %d %d %d %d %d" (fun u v w x y -> u,v,w,x,y)

module Int64 = struct
	include Int64
	let (+|) p q = Int64.add p q
	let (-|) p q = Int64.sub p q
	let ( *|) p q = Int64.mul p q
	let (/|) p q = Int64.div p q
	let (<|) p q = 
		if Int64.compare p q < 0 then true 
		else false
	let (>|) p q = 
		if Int64.compare p q > 0 then true
		else false
	let (>=|) p q = not (p < q)
	let (<=|) p q = not (p > q)
	let labs p = if p <| 0L then -1L*|p else p
	let (~|) p = Int64.of_int p
end


let dump_2darr f a =
	Array.fold_left (fun u v ->
		u ^ Array.fold_left (fun u v -> u ^ (f v) ^ ",") "" v ^ ";\n"
	) "" a |> print_endline


let () =
	let n,a = get_2_ints ()
	in let ar = input_int_array n
	in let mx = (Array.fold_left max 0 ar)*n
	in let open Bigarray in let open Int64
	in
	let dp = Bigarray.Array3.create int64 c_layout (n+5) (n+5) (mx+1)
	in dp.{0,0,0} <- 1L;
	for i=0 to n-1 do
		for j=0 to n do
			for k=0 to mx do
				dp.{i+1,j,k} <- dp.{i,j,k} +| (
					let v = k-ar.(i) in
					if j>=1 && v>=0 then dp.{i,j-1,v} else 0L
				)
			done
		done
	done;
	let s = ref 0L in
	for k=1 to n do
		if a*k <= mx then
		s := !s +| dp.{n,k,a*k}
	done;
	!s |> printf "%Ld\n"