#nullable enable #region using System.Text.Json.Serialization.Metadata; var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); var n = I(); var m = I(); var plants = Range(n, () => (I(), I())); var limits = new long[n]; for (var i = 0; i < n; i++) { var (a, b) = plants[i]; limits[i] = (m - a) / b + 1; } bool F(int x) { for (var i = 0; i < n; i++) { var d = i / x + 1; if (limits[i] < d) return false; } return true; } Array.Sort(limits); var pass = n; var fail = 0; while (Math.Abs(pass - fail) > 1) { var mid = (pass + fail) >> 1; if (F(mid)) pass = mid; else fail = mid; } Console.WriteLine(pass);