#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,SIQ;
ll dp[1100],ans;
struct node{
ll IQ,EQ;
}a[1100];
bool cmp(node x,node y){
if(x.IQ!=y.IQ) return x.IQ>y.IQ;
return x.EQ>y.EQ;
}
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i].IQ,&a[i].EQ);
sort(a+1,a+n+1,cmp);
memset(dp,~0x3f,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++){
if(a[i].IQ<=0&&a[i].EQ<=0) continue;
if(a[i].IQ>=0){
SIQ+=a[i].IQ;
for(int j=SIQ;j>=a[i].IQ;j--){
dp[j]=max(dp[j],dp[j-a[i].IQ]+a[i].EQ);
if(dp[j]>0) ans=max(ans,dp[j]+j);
}
}else{
for(int j=0;j<=a[i].IQ+SIQ;j++){
dp[j]=max(dp[j],dp[j-a[i].IQ]+a[i].EQ);
if(dp[j]>0) ans=max(ans,dp[j]+j);
}
}
}
printf("%d",ans);
return 0;
}