#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

#include <cmath>
#include <cstdlib>
#include <climits>

#include "show_vector.hh"
//#include <stdio.h>
//#include <stdlib.h>


using namespace std;

#define debug false

int main(int argc, char *argv[]){

  int N, H;
  cin >> N >> H;
  vector<pair<int, int>> ab(N);
  int a_max = INT_MIN, b_min = INT_MAX;
  int x, y;
  for(int i = 0; i < N; i++){
    cin >> ab[i].first >> ab[i].second;
    if(ab[i].first > a_max) a_max = ab[i].first;
    if(ab[i].second > b_min) b_min = ab[i].second;
  }

  int n = 0;
  for(int i = N-1; 0 <= i; i--){
    if(ab[i].second <= a_max){
      ab.erase(ab.begin()+i);
      n++;
    }
  }

  N -= n;
  int a[N] = {}, b[N] = {};
  for(int i = 0; i < N; i++){
    a[i] = ab[i].first;
    b[i] = ab[i].second;
  }
  sort(a, a+N);
  sort(b, b+N);
  int count = 0;
  int damage = 0;
  int tmp;
  for(int i = 0; i < N; i++){
    damage += b[N-1-i];
    count++;

    if(H <= damage){
      //printf("throw only\n");
      goto END;
    }
  }
  //printf("damage : %d\n", damage);
  //printf("count  : %d\n", count);

  /*
  // H > damage
  while(H > damage){
    damage += a_max;
    count++;
  }
  */

  tmp = (H-damage) / a_max;
  if((H-damage) % a_max != 0) tmp++;
  count += tmp;

  END:
    cout << count << endl;


  return 0;
}
