import Control.Applicative
import Control.Monad
import Control.Monad.ST
import Data.Functor
import Data.Function
import Data.Monoid
import Data.Maybe
import Data.List
import qualified Data.Foldable as Foldable
import qualified Data.Set as Set
import qualified Data.Sequence as Sequence
import Data.List.Split
import Data.Bits
import Data.Char
import Data.Ix
import Data.Ratio
import Data.Ord
import Data.Tuple
--import Data.Array
import Data.Array.IArray
--import Data.Array.Unboxed
import Data.Array.MArray
import Data.Array.IO
import Data.Array.ST
import Data.IORef
import Data.STRef
-- import System.IO.Unsafe
 
readInt = read :: String -> Int
readInteger = read :: String -> Integer
readDouble = read :: String -> Double
getInt = readLn :: IO Int
getInts = map readInt . words <$> getLine
getInteger = readLn :: IO Integer
getIntegers = map readInteger . words <$> getLine
getDouble = readLn :: IO Double
sjoin :: (Show a) => [a] -> String
sjoin = unwords . map show
cond :: a -> a -> Bool -> a
cond t f c = if c then t else f
apply2 :: (a -> a -> b) -> [a] -> b
apply2 f [x,y] = f x y
apply3 :: (a -> a -> a -> b) -> [a] -> b
apply3 f [x,y,z] = f x y z
apply4 :: (a -> a -> a -> a -> b) -> [a] -> b
apply4 f [x,y,z,w] = f x y z w
fnBin :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
fnBin op f g x = op (f x) $ g x
fnTuple :: (a -> b, a -> c) -> a -> (b, c)
fnTuple (f,g) a = (f a, g a)
replace :: (Eq a) => a -> a -> [a] -> [a]
replace x y = map (\z -> if z==x then y else z)
modifyArray :: (Ix i, MArray a e m) => a i e -> i -> (e -> e) -> m ()
modifyArray arr ix f = readArray arr ix >>= writeArray arr ix . f
dictCompare :: [a -> a -> Ordering] -> a -> a -> Ordering
dictCompare [] _ _ = EQ
dictCompare (f:fs) x y = let c = f x y in if c==EQ then dictCompare fs x y else c
binMap :: (a -> a -> b) -> [a] -> [b]
binMap f (x:xs@(y:_)) = f x y : binMap f xs
binMap _ _ = []
splitRec :: Int -> [a] -> [[a]]
splitRec _ [] = []
splitRec n xs = let (y,ys) = splitAt n xs in y : splitRec n ys
-- end of templete


main = do
    [n,h] <- getInts
    xs <- map (apply2 (,)) <$> replicateM n getInts
    let ((da, db):ds) = sortBy (\(a,b) (a',b') -> compare a' a <> compare b b') xs
    let (ts, nts) = partition ((>=db) . snd) ds
    --print (da,db)
    --print ts
    --print nts
    let sts = sortBy (flip compare) $ map snd ts
    --print sts
    rest <- newIORef h
    result <- newIORef 0
    forM_ sts $ \b -> do
      r <- readIORef rest
      when (r>0) $ do
          writeIORef rest (r-b)
          modifyIORef result (+1)
    --readIORef rest >>= print
    --readIORef result >>= print
    let tts = sortBy (flip compare) $ filter (>=da) $ map snd nts
    --print tts
    r' <- readIORef rest
    when (r'>0) $ do
        forM_ tts $ \b -> do
            r <- readIORef rest
            when (r>da) $ do
                writeIORef rest (r-b)
                modifyIORef result (+1)
    --readIORef rest >>= print
    --readIORef result >>= print
    r_ <- readIORef rest
    when (r_>0) $ do
        let it = r_ - db
        let ct = (it+da-1) `div` da
        modifyIORef result (+(1+ct))
    readIORef result >>= print
    return ()