import Data.List (sort)

main :: IO ()
main = interact $ format . solve . parse

parse :: String -> (Int, Int, Int, [(Int, Int)])
parse input = (n, d, a, xhs) where
    lns = lines input
    [n, d, a] = map read . words . head $ lns
    xhs = map (tuple2 . map read . words) . take n . tail $ lns
    tuple2 [x, y] = (x, y)

solve :: (Int, Int, Int, [(Int, Int)]) -> Int
solve (n, d, a, xhs) = subsolve 0 0 (sort xhs) [] where
    subsolve c _ [] _ = c
    subsolve c s xhs yis = if null yis || x <= y
        then if h <= s
            then subsolve c s (tail xhs) yis
            else subsolve (c + q) (s + q * a) (tail xhs) (yis ++ [(x + 2 * d, q * a)])
        else subsolve c (s - snd (head yis)) xhs (tail yis) where
            x = fst (head xhs)
            h = snd (head xhs)
            y = fst (head yis)
            q = - div (- (h - s)) a

format :: Int -> String
format = (++ "\n") . show
