#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 29;
const double EPS = 1e-9;
const int dx[] = {1, 0, -1, 0, 1, 1, -1, -1},
          dy[] = {0, -1, 0, 1, 1, -1, -1, 1};
int main() {
  int N, H;
  scanf("%d%d", &N, &H);
  vector<int> A, B;
  int amax = 0;
  for (int i = 0; i < N; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    amax = max(amax, a);
    A.push_back(a);
    B.push_back(b);
  }
  priority_queue<int> P;
  for (int i = 0; i < N; i++) {
    if (B[i] > amax) {
      P.push(B[i]);
    }
  }
  long long sum = 0;
  long long now = 0;
  bool flag = false;
  while (!P.empty()) {
    sum += P.top();
    P.pop();
    now++;
    if (H <= sum) {
      flag = true;
      break;
    }
  }
  if (flag) {
    cout << now << endl;
    return 0;
  }
  cout << ((H - sum) / amax) + now << endl;
  return 0;
}
