#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#define ft first
#define sd second
#define get(t, x) get<x>(t)
#define pb push_back
#define len length
#define dbgn(x) cerr << #x << ": " << x << '\n'
#define dbg(x) cerr << #x << ": " << x << ' '
#define MAX 1100000

using namespace std;
using namespace __gnu_pbds;

using lli = long long int;
using pll = pair<lli, lli>;
using pli = pair<lli, int>;
using pii = pair<int, int>;
using mii = map<int, int>;
using ti3 = tuple<int, int, int>;
using pqpi_min = priority_queue<pii, vector<pii>, greater<pii>>;
using ost = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>;
template<class T>
void print(T* a, int sz) {for(int i=0;i<sz;++i) cerr<<a[i]<<' ';cerr<<endl;}
istream &operator>>(istream &is, pii &p) {is >> p.ft >> p.sd;return is;}
ostream &operator<<(ostream &os, const pii &p) {os << "[" << p.ft << ", " << p.sd << ']'; return os;}
//int+string
//cin.ignore();

constexpr int M = 1e9 + 7;
constexpr double PI = 3.14159265358979323846;

int b[MAX/10];
void solve()
{
    int n,h,mxa=0,i,a,ans=0;
    cin>>n>>h;
    for(i=0;i<n;++i) cin>>a>>b[i],mxa=max(mxa,a);
    sort(b,b+n);
    i=n-1;
    while(h>0 && b[i]>mxa) h-=b[i--],++ans;
    ans+=(h+mxa-1)/mxa;
    cout<<ans;
}   
int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    // freopen("inp.txt","r",stdin);
    solve();
    return 0;
}