#include<bits/stdc++.h>
using namespace std;

struct dat{
  int r, w;
  bool operator<(const dat &R)const{
    if(r!=R.r) return r>R.r;
    return w<R.w;
  }
};

int n, dp[1005];
dat rw[1005];

int main(){
  
  while(cin>>n, n){

    int sum=0, sum2=0;
      
    for(int i=0;i<n;i++){
      cin>>rw[i].r>>rw[i].w;
      sum+=rw[i].r;
      sum2+=rw[i].w;
    }
    
    sort(rw,rw+n);

    if(rw[0].r*2<=sum){
      cout<<sum+sum2<<endl;
      continue;
    }
    
    int space=rw[0].r*2-sum;
    
    int ans=sum2;
    
    memset(dp,0,sizeof(dp));
    
    dp[0]=1;
      
    for(int i=1;i<n;i++){
      
      for(int j=space;j>=0;j--){
	if(!dp[j]) continue;
	if(j+rw[i].w<=space) dp[j+rw[i].w]=1;
      }
    }
    
    int maxs=0;
    
    for(int i=0;i<=space;i++)
      if(dp[i]) maxs=max(maxs,i);

    cout<<rw[0].r*2+(ans-maxs)<<endl;
    
  }
  
  return 0;
}