using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var a = NArr(n); var INF = int.MaxValue / 2; var init = Enumerable.Repeat(INF, 100_001).ToArray(); var dp = (int[])init.Clone(); dp[0] = 0; for (var i = 0; i < n; ++i) { var ndp = (int[])init.Clone(); for (var j = 0; j < dp.Length; ++j) { if (dp[j] == INF) continue; ndp[j] = Math.Min(ndp[j], dp[j] + a[i][1]); ndp[j + a[i][0]] = Math.Min(ndp[j + a[i][0]], dp[j]); } dp = ndp; } var ans = INF; for (var i = 0; i < dp.Length; ++i) ans = Math.Min(ans, Math.Max(i, dp[i])); WriteLine(ans); } }