#include <bits/stdc++.h>
void Swap(int x[], int i, int j);
void QSort(int x[], int left, int right);
int main(void) {
  int N, H;
  scanf("%d %d", &N, &H);
  int loop = 0;
  char useable[N];
  int a[N], b[N];
  int enemy_HP = H;
  int count = 0;
  int base_atk_cnt = 0;
  int ans;
  int base_attack;
  int throw_cnt = 1;
  base_attack = 0;
  while (loop != N) {
    scanf("%d %d", &a[loop], &b[loop]);
    loop++;
    if (base_attack < a[loop - 1]) {
      base_attack = a[loop - 1];
    }
  }
  base_atk_cnt = enemy_HP / base_attack;
  ans = base_atk_cnt;
  QSort(b, 0, N - 1);
  throw_cnt = N;
  while (throw_cnt > 0) {
    count = 0;
    enemy_HP = H;
    while (throw_cnt != count) {
      enemy_HP = enemy_HP - b[N - ++count];
    }
    if (enemy_HP > 0) {
      count = count + (enemy_HP / base_attack);
    } else {
      if (ans > count) {
        ans = count;
      }
      break;
    }
    if (enemy_HP % base_attack > 0) {
      count++;
    }
    if (ans > count) {
      ans = count;
    }
    throw_cnt--;
  }
  printf("%d\n", ans);
  return 0;
}
void QSort(int* x, int left, int right) {
  int i, j;
  int pivot;
  i = left;
  j = right;
  pivot = x[(left + right) / 2];
  while (1) {
    while (x[i] < pivot) i++;
    while (pivot < x[j]) j--;
    if (i >= j) break;
    Swap(x, i, j);
    i++;
    j--;
  }
  if (left < i - 1) QSort(x, left, i - 1);
  if (j + 1 < right) QSort(x, j + 1, right);
}
void Swap(int x[], int i, int j) {
  int temp;
  temp = x[i];
  x[i] = x[j];
  x[j] = temp;
}
