using System; using System.Collections.Generic; using System.Linq; public static class Solution { public static void Main() { var N = int.Parse(Console.ReadLine()); var items = new (int v, int w)[N]; for (int i = 0; i < N; i++) { var vals = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); items[i] = (vals[0], vals[1]); } var V = int.Parse(Console.ReadLine()); var nap = new Dictionary { [0] = 0 }; foreach (var item in items) { var adds = new List<(int v, int w)>(); foreach (var kv in nap) { var w = kv.Key + item.w; var v = kv.Value + item.v; if (!nap.TryGetValue(w, out int value) || value < v) { adds.Add((v, w)); } } foreach (var add in adds) { if (!nap.TryGetValue(add.w, out int value) || value < add.v) { nap[add.w] = add.v; } } } var ordered = nap.OrderBy(x => x.Key).ToArray(); var min = Math.Max(ordered.First(x => x.Value == V).Key, 1); var max = ordered.FirstOrDefault(x => x.Value > V).Key - 1; Console.WriteLine(min); Console.WriteLine(max == -1 ? "inf" : max); } }