#include <bits/stdc++.h>
using namespace std;
long long int gcd(long long int a, long long int b) {
  return b ? gcd(b, a % b) : a;
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
long long int mpow(long long int N, long long int P, long long int M) {
  if (P == 0) return 1;
  if (P % 2 == 0) {
    long long int t = mpow(N, P / 2, M);
    return t * t % M;
  }
  return N * mpow(N, P - 1, M) % M;
}
long long int counter(long long int x) {
  if (x == 0) return 0;
  return counter(x >> 1) + (x & 1);
}
vector<bool> prime(100 + 1, true);
void prime_table(void) {
  prime[0] = false;
  prime[1] = false;
  for (long long int i = 2; i * i <= 100; i++) {
    if (!prime[i]) {
      continue;
    }
    for (long long int j = i + i; j <= 100; j += j + i) {
      prime[j] = false;
    }
  }
}
bool IsPrime(long long int num) {
  if (num < 2)
    return false;
  else if (num == 2)
    return true;
  else if (num % 2 == 0)
    return false;
  double sqrtNum = sqrt(num);
  for (long long int i = 3; i <= sqrtNum; i += 2) {
    if (num % i == 0) {
      return false;
    }
  }
  return true;
}
signed main() {
  long long int N, H;
  cin >> N >> H;
  long long int all_b = 0;
  long long int max_a = 0;
  long long int place = 0;
  vector<long long int> a, b;
  for (long long int i = (0); i < (N); i++) {
    long long int A, B;
    cin >> A >> B;
    if (A > max_a) {
      max_a = A;
    }
    all_b += B;
    a.push_back(A);
    b.push_back(B);
  }
  long long int sub = 0;
  for (long long int i = (0); i < (N); i++) {
    if (b[i] >= max_a) {
      sub += b[i];
      place++;
    }
  }
  sort(b.begin(), b.end(), greater<long long int>());
  if (all_b >= H) {
    long long int h = H;
    long long int count_b = 0;
    for (long long int i = 0; i < N; i++) {
      h -= b[i];
      if (h <= 0) {
        count_b = i + 1;
      }
    }
    H -= sub;
    if ((ceil((double)H / max_a) + place) > count_b) {
      cout << count_b << endl;
    } else {
      cout << fixed << setprecision(10) << ceil((double)H / max_a) + place
           << endl;
    }
  } else {
    H -= sub;
    cout << fixed << setprecision(10)
         << (long long int)ceil((double)H / max_a) + place << endl;
  }
}
