import Control.Monad
import Control.Monad.ST
import Data.List
import Control.Monad.Trans.State.Strict
import Data.Char (isSpace)
import Data.Array.Unboxed
import Data.Array.ST

import qualified Data.ByteString.Char8 as B

type Parser a = StateT B.ByteString Maybe a

parseInt :: Parser Int
parseInt = StateT (B.readInt . B.dropWhile isSpace)

parseInt2 :: Parser (Int,Int)
parseInt2 = liftM2 (,) parseInt parseInt

main = do
    (n:h:_)<-map read.words<$>getLine::IO[Int]
    abs<-unfoldr (runStateT parseInt2) <$> B.getContents::IO[(Int,Int)]
    --
    print $ solve h abs
--
solve h abs = case f1 of
    Just x -> x+1
    Nothing -> (h - last bsums + maxa -1) `div` maxa + length bsums
    where
        maxa = maximum $ map fst abs
--        maxaminb = minimum $ map snd $ filter (\(a,_)->a==maxa) abs
        bcs = sortBy (flip compare) $ filter (>=maxa) $ map snd abs
        bsums = scanl1 (+) bcs
        f1 = findIndex (>=h) bsums
