N = int(input()) AB = [tuple(map(int, input().split())) for _ in range(N)] dp = [[0]*(1000*N+1) for _ in range(N+1)] for i in range(N): Ai, Bi = AB[i] for j in range(1000*N+1): dp[i+1][j] = max(dp[i+1][j], dp[i][j]) if j-Ai>=0: dp[i+1][j] = max(dp[i+1][j], dp[i][j-Ai]+Bi) B = sum(Bi for _, Bi in AB) ans = 10**18 for i in range(1000*N+1): ans = min(ans, max(i, B-dp[N][i])) print(ans)