{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
import qualified Data.ByteString.Lazy.Char8 as B
import Data.Maybe
-- import Data.List
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as VU
-- import qualified Data.Vector.Unboxed.Mutable as VUM
-- import Control.Monad
-- import Control.Monad.ST
import Debug.Trace

solve :: Int -> Int -> [Int] -> Int
solve n a xs = sum [reduce V.! i VU.! (i*a) | i <- [1..n]]
  where

  reduce = foldl update initTbl xs

  initTbl = V.fromListN (n+1) (v1 : repeat v2)
    where v1 = VU.fromListN (a*n + 1) (1 : repeat 0)
          v2 = VU.fromListN (a*n + 1) (repeat 0)

  update :: V.Vector (VU.Vector Int) -> Int -> V.Vector (VU.Vector Int)
  update tbl x = V.fromListN (n+1) [upd i | i <- [0..n]]
    where upd :: Int -> VU.Vector Int
          upd 0 = tbl V.! 0
          upd i = upd0 (tbl V.! (i-1)) (tbl V.! i)
          upd0 :: VU.Vector Int -> VU.Vector Int -> VU.Vector Int
          upd0 v1 v2 = VU.zipWith (+) ((VU.replicate x 0) VU.++ v1) v2

readBInt :: B.ByteString -> Int
readBInt = fst . fromJust . B.readInt

tmain :: B.ByteString -> Int
tmain cont =
  let remLines0 = map B.words (B.lines cont)
      [bs_n,bs_a]:remLines1 = remLines0
      n = readBInt bs_n
      a = readBInt bs_a
      line2:remLines2 = remLines1
      xs = map readBInt line2
  in solve n a xs

outAnswer :: Int -> IO ()
outAnswer = putStrLn . show

main :: IO ()
main = outAnswer . tmain =<< B.getContents
