n,h=map(int,input().split())
a=[]
b=[]
for _ in range(n):
    a_i,b_i=map(int,input().split())
    a.append(a_i)
    b.append(b_i)

import bisect,numpy,math


b=sorted(b)
cum=list(numpy.cumsum(b))
index = bisect.bisect_left(b,max(a))
if index==0:
    #投げる方が威力が高い
    throw=0
    b=sorted(b,reverse=True)
    for i in range(n):
        throw+=b[i]
        if throw>=h:
            break

    h-=throw

    cnt=math.ceil(h/max(a))
    if h<=0:
        cnt=i+1-index
    else:
        cnt+=i+1-index

    print(cnt)
    exit(0)

else:
    #降った方が良い場合もある
    throw = 0
    for i in range(n):
        if i>=index:
            throw+=b[i]

    h-=throw
    cnt=math.ceil(h/max(a))
    if h<=0:
        cnt=n-index
    else:
        cnt+=n-index

    print(cnt)
