#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
long long lcm(long long x, long long y) { return x * y / gcd(x, y); }
long long roundup(long long a, long long b) { return (a - 1) / b + 1; }
void YN(bool flg) { cout << (flg ? "YES" : "NO") << endl; }
void Yn(bool flg) { cout << (flg ? "Yes" : "No") << endl; }
void yn(bool flg) { cout << (flg ? "yes" : "no") << endl; }
signed main() {
  long long n, h;
  cin >> n >> h;
  vector<long long> a(n), b(n);
  for (long long i = (0); i < (n); ++i) {
    cin >> a[i] >> b[i];
  }
  vector<long long> orda(n), ordb(n);
  iota((orda).begin(), (orda).end(), 0);
  iota((ordb).begin(), (ordb).end(), 0);
  sort((orda).begin(), (orda).end(),
       [&](long long x, long long y) { return a[x] > a[y]; });
  sort((ordb).begin(), (ordb).end(),
       [&](long long x, long long y) { return b[x] > b[y]; });
  long long ans = 0;
  for (long long i = (0); i < (n); ++i) {
    long long at = b[ordb[i]];
    if (at > a[orda[0]] && ordb[i] != orda[0]) {
      h -= at;
      ans++;
    }
    if (h <= 0) break;
  }
  if (h > 0) {
    if (h <= b[orda[0]])
      ans++;
    else {
      ans += roundup(h - b[orda[0]], a[orda[0]]) + 1;
    }
  }
  cout << ans << endl;
}
