#include <bits/stdc++.h>
using namespace std;
inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
const double EPS = 1e-10;
const double PI = acos(-1.0);
int main(void) {
  unsigned long n, h;
  vector<int> a, b;
  cin >> n >> h;
  for (int i = (0); i < (n); ++i) {
    unsigned long c, d;
    cin >> c >> d;
    a.push_back(c);
    b.push_back(d);
  }
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  reverse(a.begin(), a.end());
  reverse(b.begin(), b.end());
  unsigned long bsum = 0;
  unsigned long bcnt = 0;
  unsigned long res = 100000000000000;
  for (int i = (0); i < (b.size()); ++i) {
    unsigned long _bsum;
    unsigned long _h;
    bsum += b[i];
    bcnt++;
    if (bsum >= h) {
      res = min(res, bcnt);
    }
    _h = h - bsum;
    unsigned long acnt = ceil((double)_h / (double)a[0]);
    res = min(res, acnt + bcnt);
  }
  cout << res << endl;
  return 0;
}
