using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program
{

    class Katana
    {
        public readonly int a;
        public readonly int b;

        public Katana(int a, int b)
        {
            this.a = a;
            this.b = b;
        }
    }

    private static List<Katana> katanas;

    private static int Search(int hp, int maxSwingDamage)
    {
        int resultTurn = 0;
        foreach (var katana in katanas)
        {
            if (katana.b >= maxSwingDamage)
            {
                hp -= katana.b;
                resultTurn++;
                if(hp <= 0)
                {
                    return resultTurn;
                }
            }
        }

        resultTurn += (int)Math.Ceiling((float)hp / maxSwingDamage);

        return resultTurn;
    }

    static void Main(string[] args)
    {
        var firstInputStrings = Console.ReadLine().Split(' ');
        var N = int.Parse(firstInputStrings[0]);
        int H = int.Parse(firstInputStrings[1]);

        katanas = new List<Katana>();
        for (int i = 0; i < N; i++)
        {
            var inputStrings = Console.ReadLine().Split(' ');
            var a = int.Parse(inputStrings[0]);
            var b = int.Parse(inputStrings[1]);
            katanas.Add(new Katana(a, b));
        }

        var maxSwingDamage = katanas.Max(x => x.a);

        katanas = katanas.OrderBy(x => -x.b).ToList();

        Console.WriteLine(Search(H, maxSwingDamage));
    }
}