#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<ctime> #include<string> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> using namespace std; typedef long long LL; const int MR=1e5+10; int n; int a[101],b[101]; int dp[101][MR]; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]>>b[i]; memset(dp,0x3f,sizeof dp); dp[0][0]=0; for(int i=1;i<=n;i++){ for(int j=0;j<MR;j++){ dp[i][j]=dp[i-1][j]+b[i]; if(j>=a[i]){ dp[i][j]=min(dp[i][j],dp[i-1][j-a[i]]); } } } int ans=1e9; for(int j=0;j<MR;j++){ ans=min(max(j,dp[n][j]),ans); } cout<<ans<<endl; return 0; }