#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 1;
const long long LLINF = 1e17 + 1;
const int DX[9] = {0, 0, 1, -1, 1, 1, -1, -1, 0};
const int DY[9] = {1, -1, 0, 0, 1, -1, 1, -1, 0};
const long long MOD = 1e9 + 7;
const double PI = 3.14159265358979323846264338327950288;
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(15);
  long long N, H;
  cin >> N >> H;
  vector<pair<long long, long long>> A(N);
  for (int i = 0; i < N; i++) {
    cin >> A[i].first >> A[i].second;
  }
  sort(A.begin(), A.end(), greater<pair<long long, long long>>());
  long long ans = 0;
  if (N >= 2) {
    long long check = 0;
    long long max_sec = A[0].first;
    long long min_fin = A[0].second;
    for (int i = 0; i < N; i++) {
      if (A[i].first != max_sec) {
        min_fin = A[i - 1].second;
        A.erase(A.begin() + (i - 1));
        break;
      } else if (i == N - 1) {
        min_fin = A[i].second;
        A.erase(A.begin() + i);
      }
    }
    vector<long long> final(N - 1);
    for (int i = 0; i < N - 1; i++) {
      final[i] = A[i].second;
    }
    sort(final.begin(), final.end(), greater<long long>());
    while (true) {
      ans++;
      if (H <= min_fin) {
        cout << ans;
        return 0;
      } else if (check < N - 1 && max_sec < final[check]) {
        H -= final[check];
        check++;
        if (H <= 0) {
          cout << ans;
          return 0;
        }
      } else {
        H -= max_sec;
        if (H % max_sec == 0) {
          cout << ans + H / max_sec;
        } else {
          cout << ans + H / max_sec;
        }
        return 0;
      }
    }
  } else {
    while (true) {
      ans++;
      if (H <= max(A[0].first, A[0].second)) {
        cout << ans;
        return 0;
      } else {
        H -= A[0].first;
      }
    }
  }
}
