void main() {
    int[] tmp = readln.split.to!(int[]);
    int n = tmp[0], h = tmp[1];

    int[] a = new int[n], b = new int[n];
    foreach (i; 0 .. n) {
        tmp = readln.split.to!(int[]);
        a[i] = tmp[0], b[i] = tmp[1];
    }

    zip(a, b).sort!((x, y) => x[0] > y[0]);
    int amax = a[0], bmax = b[0];
    a.popFront, b.popFront;
    if (!b.empty) zip(a, b).sort!((x, y) => x[1] > y[1]);

    int cnt;

    while (h > 0) {
        if (h <= max(amax, bmax)) {
            h -= max(amax, bmax);
        } else if (b.empty || amax > b[0]) {
            cnt += min((h+amax-1)/amax, (h-bmax+amax-1)/amax+1);
            break;
        } else {
            h -= b[0];
            b.popFront;
        }
        ++cnt;
    }

    cnt.writeln;
}

import std.stdio;
import std.string;
import std.array;
import std.conv;
import std.algorithm;
import std.range;
import std.math;
import std.numeric;
import std.container;
import std.typecons;
import std.ascii;
import std.uni;