#include <bits/stdc++.h>
using namespace std;
void int_quicksort(int* sorted, int* data, long datanum);
void long_quicksort(long* sorted, long* data, long datanum);
void double_quicksort(double* sorted, double* data, long datanum);
int IntCompareA(const void* pElem1, const void* pElem2);
int DoubleCompareA(const void* pElem1, const void* pElem2);
int main() {
  long n, h;
  cin >> n >> h;
  vector<long> a(n);
  vector<long> b(n);
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
  }
  long sumh = 0;
  long turn = 0;
  long max_a = *max_element(a.begin(), b.begin());
  vector<long> bs(b);
  sort(bs.begin(), bs.end());
  reverse(bs.begin(), bs.end());
  for (long x : bs) {
    if (x < max_a) {
      continue;
    }
    sumh += x;
    turn++;
    if (h <= sumh) {
      cout << turn << endl;
      return 0;
    }
  }
  cout << "debug: " << sumh << endl;
  cout << "debug: " << turn << endl;
  while (sumh < h) {
    sumh += max_a;
    turn++;
  }
  cout << turn << endl;
  return 0;
}
void int_quicksort(int* sorted, int* data, long datanum) {
  memcpy(sorted, data, sizeof(int) * datanum);
  qsort(sorted, (size_t)datanum, (size_t)sizeof(int), IntCompareA);
}
void long_quicksort(long* sorted, long* data, long datanum) {
  memcpy(sorted, data, sizeof(long) * datanum);
  qsort(sorted, (size_t)datanum, (size_t)sizeof(long), IntCompareA);
}
void double_quicksort(double* sorted, double* data, long datanum) {
  memcpy(sorted, data, sizeof(double) * datanum);
  qsort(sorted, (size_t)datanum, (size_t)sizeof(double), DoubleCompareA);
}
int IntCompareA(const void* pElem1, const void* pElem2) {
  return *(const long*)pElem1 - *(const long*)pElem2;
}
int DoubleCompareA(const void* pElem1, const void* pElem2) {
  return *(const double*)pElem1 - *(const double*)pElem2;
}
