#include <bits/stdc++.h>
using namespace std;
template <typename T>
void MACRO_VAR_Scan(T& t) {
  cin >> t;
}
template <typename First, typename... Rest>
void MACRO_VAR_Scan(First& first, Rest&... rest) {
  cin >> first;
  MACRO_VAR_Scan(rest...);
}
typedef struct {
  long long a, b;
} S;
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ;
  long long n, h;
  MACRO_VAR_Scan(n, h);
  ;
  S s[n];
  long long maxv = 0, maxi;
  for (long long i = 0; i < (n); i++) {
    cin >> s[i].a >> s[i].b;
    if (s[i].a > maxv || (s[i].a == maxv && s[i].b > s[maxi].b)) {
      maxv = s[i].a;
      maxi = i;
    }
  }
  sort(s, s + n, [](const S& s1, const S& s2) { return s1.b > s2.b; });
  long long d = 0, ans = 0;
  for (long long i = 0; i < (n); i++) {
    if (s[i].b > maxv) {
      d += s[i].b;
      ans++;
      if (d >= h) {
        cout << (ans) << endl;
        ;
        return 0;
        ;
      }
    } else {
      break;
    }
  }
  ans += (h - d) / s[maxi].a + ((h - d) % s[maxi].a ? 1 : 0);
  cout << (ans) << endl;
  ;
  return 0;
  ;
}
