import sys def solve(): # 高速な入出力のために sys.stdin.read を使用 input_data = sys.stdin.read().split() if not input_data: return iterator = iter(input_data) try: N = int(next(iterator)) M = int(next(iterator)) # 入力データのパース # a_i, b_i のリストを作成 # data[2]から始まる要素のうち、偶数番目がa、奇数番目がb # メモリ効率と速度のためにスライスを使用 a_list = [] b_list = [] # 入力配列全体からaとbを抽出 # input_data[2:] の範囲でステップ2で取得 all_params = input_data[2:] a_list = map(int, all_params[0::2]) b_list = map(int, all_params[1::2]) # 締め切り(何日目の朝までにやるべきか)を計算 deadlines = [] for a, b in zip(a_list, b_list): # 猶予日数 = (M - a) // b # 締め切り = 猶予日数 + 1 # 植物は (M - a) // b 回目の夜まではセーフ。 # その次の夜にアウトになるので、その日の朝までに狩る必要がある。 t = (M - a) // b + 1 deadlines.append(t) # 締め切りが早い順にソート deadlines.sort() ans = 0 # 各タイミングで必要な k を計算し、最大値を取る for i, deadline in enumerate(deadlines): # i+1 本の植物を deadline 日目までに処理する必要がある # k * deadline >= i + 1 # k >= (i + 1) / deadline # k = ceil((i + 1) / deadline) # 整数演算での切り上げ: (numerator + denominator - 1) // denominator needed_k = (i + 1 + deadline - 1) // deadline if needed_k > ans: ans = needed_k print(ans) except StopIteration: return if __name__ == '__main__': solve()