#include #define rep(i,n) for(int i = 0; i < (n); ++i) #define srep(i,s,t) for (int i = s; i < t; ++i) #define drep(i,n) for(int i = (n)-1; i >= 0; --i) using namespace std; typedef long long int ll; typedef pair P; #define yn {puts("Yes");}else{puts("No");} #define MAX_N 200005 int main() { int n; cin >> n; int a[n], b[n], sum = 0; rep(i,n){ cin >> a[i] >> b[i]; sum += b[i]; } int dp[n*2000]; rep(i,n*2000) dp[i] = 1001001001; dp[0] = sum; rep(i,n){ drep(j,n*2000){ if(j + a[i] >= n * 2000) continue; dp[j+a[i]] = min(dp[j+a[i]], dp[j]-b[i]); } } int ans = 1001001001; rep(i,n*2000) ans = min(ans, max(i,dp[i])); cout << ans << endl; return 0; }