#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int N, H, Ans;
struct Katana {
  int A, B, Id;
} Set[MAXN];
inline bool cmpByA(const Katana &A, const Katana &B) {
  return A.A == B.A ? A.B > B.B : A.A > B.A;
}
inline bool cmpByB(const Katana &A, const Katana &B) { return A.B > B.B; }
void CRASH(int X) {
  int A[10000000];
  CRASH(X);
}
inline void Throw(int valueReduced) {
  if (H > valueReduced)
    H -= valueReduced, ++Ans;
  else {
    cout << Ans + 1 << endl;
    CRASH(1);
    exit(0);
  }
}
inline void Wield(int wieldValue, int throwValue) {
  H -= throwValue, ++Ans;
  if (H > 0) {
    Ans += H / wieldValue;
    if ((H % wieldValue)) ++Ans;
  }
  cout << Ans << endl;
}
int main() {
  scanf("%d%d", &N, &H);
  for (int I = 1; I <= N; ++I)
    scanf("%d%d", &Set[I].A, &Set[I].B), Set[I].Id = I;
  sort(Set + 1, Set + N + 1, cmpByA);
  int maxA = Set[1].A, maxBInMaxA = Set[1].B, maxAId = Set[1].Id;
  sort(Set + 1, Set + N + 1, cmpByB);
  for (int I = 1; I <= N; ++I)
    if (Set[I].B > maxA) {
      if (Set[I].Id != maxAId) Throw(Set[I].B);
    } else
      break;
  Wield(maxA, maxBInMaxA);
  return 0;
}
