#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > vec1;
vector<pair<int, int> > vec2;
int a[100005];
int b[100005];
int N, H;
int dummy_damage;
int dummy_ans;
int solve(int v) {
  int i;
  int ans = 0;
  int damage = 0;
  if (v == 0) {
    for (i = 0; i < N; i++) {
      if (vec1[0].first <= vec2[i].first && vec1[0].second != vec2[i].second) {
        damage += vec2[i].first;
        ans++;
        dummy_ans = ans;
        dummy_damage = damage;
        if (damage >= H) {
          return ans;
        }
      }
    }
  } else {
    ans = dummy_ans;
    damage = dummy_damage;
    if (damage >= H) {
      return ans;
    }
  }
  int last = H - damage - b[vec1[v].second];
  ans++;
  if (last <= 0) {
    return ans;
  } else {
    if (last % vec1[v].first != 0) {
      ans += last / vec1[v].first;
      ans++;
    } else {
      ans += last / vec1[v].first;
    }
  }
  return ans;
}
int main() {
  scanf("%d %d", &N, &H);
  int i;
  for (i = 0; i < N; i++) {
    int ai, bi;
    scanf("%d %d", &ai, &bi);
    vec1.push_back(make_pair(ai, i));
    vec2.push_back(make_pair(bi, i));
    a[i] = ai;
    b[i] = bi;
  }
  sort(vec1.begin(), vec1.end());
  sort(vec2.begin(), vec2.end());
  reverse(vec1.begin(), vec1.end());
  reverse(vec2.begin(), vec2.end());
  int ans = 0;
  if (N == 1) {
    if (H <= b[0]) {
      printf("1\n");
    } else {
      H -= b[0];
      ans++;
      if (H % a[0] != 0) {
        ans += H / a[0];
        ans++;
      } else {
        ans += H / a[0];
      }
      printf("%d\n", ans);
    }
  } else {
    ans = solve(0);
    for (i = 1; i < N; i++) {
      if (vec1[0].first == vec1[i].first) {
        ans = min(ans, solve(i));
      } else {
        break;
      }
    }
    printf("%d\n", ans);
  }
  return 0;
}
