#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long INFL = 9 * 1e18;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
template <typename T>
void print(T&& x) {
  cout << x << endl;
}
long long inline digit(long long num) {
  int tmp = 0;
  while (num) {
    tmp++;
    num /= 10;
  }
  return tmp;
}
template <typename T>
inline T digitSum(T num) {
  T sum = 0;
  while (num) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
}
template <typename T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <typename T>
inline T lcm(T a, T b) {
  T g = gcd(a, b);
  return a / g * b;
}
template <typename T>
inline T power(T a, T b) {
  T tmp = 1;
  for (int i = 0; i < ((int)(b)); ++i) {
    tmp *= a;
  }
  return tmp;
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int ctoi(char c) { return c - '0'; }
void comb_init();
long long comb(long long n, long long k);
long long modinv(long long a, long long m) {
  long long b = m, u = 1, v = 0;
  while (b) {
    long long t = a / b;
    a -= t * b;
    swap(a, b);
    u -= t * v;
    swap(u, v);
  }
  u %= m;
  if (u < 0) u += m;
  return u;
}
int main() {
  long long n, h;
  cin >> n >> h;
  vector<int> a(n);
  vector<int> b(n);
  for (int i = 0; i < ((int)(n)); ++i) cin >> a[i] >> b[i];
  sort((a).begin(), (a).end(), greater<int>());
  sort((b).begin(), (b).end(), greater<int>());
  long long tmp = 0;
  long long bSum = 0;
  for (int i = 0; i < ((int)(b.size())); ++i) {
    if (b[i] <= a[0] || bSum > h) break;
    tmp++;
    bSum += b[i];
  }
  long long ans = tmp;
  h -= bSum;
  h = max(0ll, h);
  ans += h / a[0] + !!(h % a[0]);
  print(ans);
  return 0;
}
