#include <bits/stdc++.h>
struct Sword {
  int a, b;
  Sword() : a(0), b(0) {}
  Sword(int a, int b) : a(a), b(b) {}
};
bool operator<(const Sword& a, const Sword& b) {
  return a.a != b.a ? a.a > b.a : a.b > b.b;
}
std::istream& operator>>(std::istream& stream, Sword& s) {
  stream >> s.a >> s.b;
  return stream;
}
int main() {
  int N, H;
  std::cin >> N >> H;
  std::vector<Sword> swords(N);
  for (int i = 0; i < N; i++) {
    std::cin >> swords[i];
  }
  std::sort(swords.begin(), swords.end());
  int h = 0, times = 0;
  for (int i = 1; i < N; i++) {
    if (swords[i].b > swords[0].a) {
      h += swords[i].b;
      times++;
      if (h >= H) {
        break;
      }
    }
  }
  if (h < H) {
    h += std::max(swords[0].a, swords[0].b);
    times++;
  }
  if (h < H) {
    times += (H - h + swords[0].a - 1) / swords[0].a;
  }
  std::cout << times << std::endl;
}
