#include <bits/stdc++.h>
using namespace std;
template <typename tuple<long long int, long long int, long long int> >
void fill_all(tuple<long long int, long long int, long long int> &arr,
              const tuple<long long int, long long int, long long int> &v) {
  arr = v;
}
template <typename tuple<long long int, long long int, long long int>,
          typename ARR>
void fill_all(ARR &arr,
              const tuple<long long int, long long int, long long int> &v) {
  for (auto &i : arr) {
    fill_all(i, v);
  }
}
long long int n;
int main() {
  long long int h;
  vector<long long int> a, b;
  cin >> n >> h;
  for (long long int i = (signed)(0); i < (n); ++i) {
    long long int c, d;
    cin >> c >> d;
    a.push_back(c);
    b.push_back(d);
  }
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  vector<long long int> B;
  for (long long int i = (signed)(0); i < (b.size()); ++i) {
    if (a.back() < b[i]) {
      B.push_back(b[i]);
    }
  }
  sort(B.begin(), B.end());
  long long int cntt = 0;
  for (int i = (B.size()) - 1; i >= 0; --i) {
    h -= B[i];
    if (h <= 0) {
      cout << cntt + 1 << endl;
      return 0;
    }
    cntt++;
  }
  long long int ng = -1, ok = 93193111451418101;
  while (ok - ng > 1) {
    long long int m = (ok + ng) / 2;
    long long int cnt = (m * a.back());
    if (cnt < h) {
      ng = m;
    } else {
      ok = m;
    }
  }
  cout << cntt + ok << endl;
}
