#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
typedef long long int ll;
int n;
int dp[1001];
int main(){
	while(1){
		cin >> n;
		if(n==0)break;
		vector<int> r(n),w(n);
		vector<pair<int,pair<int,int> > > p;
		for(int i=0;i<n;i++){
			cin >> r[i] >> w[i];
			p.push_back(make_pair(r[i],make_pair(w[i],i)));
		}
		sort(p.begin(),p.end());
		int sum=0;
		for(int i=0;i<n-1;i++){
			sum+=p[i].first;
		}
		if(sum>=p[n-1].first){
			sum+=p[n-1].first;
			int sumw=0;
			for(int i=0;i<n;i++){
				sumw+=p[i].second.first;
			}
			cout << sum+ sumw << endl;
		}
		else{
			int dif=p[n-1].first-sum;
			for(int i=0;i<1001;i++){
				dp[i]=0;
			}
			dp[0]=1;
			for(int i=0;i<n-1;i++){
				int q=p[i].second.first;
				for(int j=1000-q;j>=0;j--){
					if(dp[j]){
						dp[j+q]=1;
					}
				}
			}
			int copy=-1;
			for(int i=dif;i>=0;i--){
				if(dp[i]){
					copy=i;
					break;
				}
			}
			int wait=dif-copy;
			sum+=p[n-1].first;
			int sumw=0;
			for(int i=0;i<n;i++){
				sumw+=p[i].second.first;
			}
			cout << sumw+sum+wait << endl;
		}
	}
}
