import Data.List main :: IO () main = do [n, p] <- map read . words <$> getLine h <- map read . words <$> getLine print $ solve h p solve :: [Int] -> Int -> Int solve x p = minPair $ foldl' f (0, p) $ zip x (tail x) where f :: (Int, Int) -> (Int, Int) -> (Int, Int) f (dp0, dp1) (h0, h1) = (v0, v1) where v0 = min (dp0 + max 0 (h1 - h0)) (dp1 + p) v1 = min (dp1 + max 0 (h0 - h1)) (dp0 + p) minPair :: (Int, Int) -> Int minPair (x, y) = min x y