open Printf
open Scanf

let rec loop x fn =
  match fn x with
  | `Break x -> x
  | `Continue x -> loop x fn

let ( |- ) x f = f x; x
let flip f a b = f b a

module Int = struct
  include Int64
  module Infix = struct 
    let ( + ) = add and ( - ) = sub
    and ( * ) = mul and ( / ) = div
  end
end

let () =
  let read_ints () =
    let str = loop (Buffer.create 10) begin fun buf ->
        try 
          `Continue (buf |- (flip Buffer.add_bytes)
                       (read_line () ^ " "))
        with _ ->
          `Break (buf |> Buffer.contents) end in
    str |> Str.(split (regexp " ")) |> List.map int_of_string in

  let num:: avg:: xs = read_ints () in
  let xs = xs |> Array.of_list in

  let cache, cached, get = let open Hashtbl in
    let memo = create 10 in
    let cache = replace memo in
    let cached = mem memo in
    let get = find memo in
    cache, cached, get in

  let rec solve ~sum ~cnt ~idx : Int64.t =
    if cached (sum, cnt, idx)
    then get (sum, cnt, idx)
    else if idx >= num
    then if cnt != 0 && cnt * avg = sum then 1L else 0L
    else
      let idx' = idx + 1 in
      let sum' = sum + xs.(idx) and cnt' = cnt + 1 in
      let open Int.Infix in
      let ans = solve ~sum ~cnt ~idx: idx'
                + solve ~sum: sum' ~cnt: cnt' ~idx: idx' in
      ans |- cache (sum, cnt, idx) in

  let sum = 0 and cnt = 0 and idx = 0 in
  let ans = solve ~sum ~cnt ~idx in
  printf "%Ld\n" ans
