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)

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 dp = Bigarray.Array3.create int c_layout (n+1) (n+1) (mx+1)
	in dp.{0,0,0} <- 1;
	for i=0 to n-1 do
		for j=0 to n-1 do
			for k=0 to mx do
				dp.{i+1,j,k} <- dp.{i,j,k} + (if j>0 && k-ar.(i)>=0 then dp.{i,j-1,k-ar.(i)} else 0);
			done
		done
	done;
	let s = ref 0 in
	for k=1 to n do
		s := !s + dp.{n,k,a*k}
	done;
	!s |> printf "%d\n"