#include <bits/stdc++.h>
#pragma warning(disable : 4996)
int anSlashes[100000];
int anThrowHits[100000];
int compar(const int *val1, const int *val2);
int main() {
  char sInput[30 + 1] = "";
  char *psInput;
  int nWeaponNumber = 0;
  int nDevilHP = 0;
  int nAttackNumber = 0;
  int nMaxSlash = 0;
  int nThrowHitOfMaxSlash = 0;
  int nMaxThrowHit = 0;
  int i = 0;
  gets(sInput);
  psInput = strtok(sInput, " ");
  nWeaponNumber = atoi(psInput);
  psInput = strtok(NULL, " ");
  nDevilHP = atoi(psInput);
  for (i = 0; i < nWeaponNumber; i++) {
    gets(sInput);
    psInput = strtok(sInput, " ");
    anSlashes[i] = atoi(psInput);
    psInput = strtok(NULL, " ");
    anThrowHits[i] = atoi(psInput);
    if (nMaxSlash < anSlashes[i]) {
      nMaxSlash = anSlashes[i];
    }
  }
  qsort(anThrowHits, nWeaponNumber, sizeof(int),
        (int (*)(const void *, const void *))compar);
  for (i = 0; i < nWeaponNumber && nDevilHP > 0; i++) {
    if (anThrowHits[i] > nMaxSlash) {
      nDevilHP = nDevilHP - anThrowHits[i];
      nAttackNumber++;
    } else {
    }
  }
  if (nDevilHP > 0) {
    nAttackNumber = nAttackNumber + (nDevilHP / nMaxSlash);
    if (nDevilHP % nMaxSlash > 0) {
      nAttackNumber++;
    }
  }
  printf("%d\n", nAttackNumber);
  return 0;
}
int compar(const int *val1, const int *val2) {
  if (*val1 < *val2) {
    return -1;
  } else if (*val1 == *val2) {
    return 0;
  } else {
    return 1;
  }
}
