#include<bits/stdc++.h>
#define x first
#define y second
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
const int maxn=5e5+23;
int dp[2][maxn*2];
//dp[i][j]表示选第i头牛之后IQ为j时,EQ最高为多少
int IQ[maxn],EQ[maxn];
int zero=4e5;
void work(){
int n,m,k,u,v,w;
scanf("%d",&n);
for(int j=0;j<=8e5;j++)dp[0][j]=dp[1][j]=-inf;
dp[0][zero]=dp[1][0]=0;
for(int i=1;i<=n;i++)scanf("%d%d",&IQ[i],&EQ[i]);
for(int i=1;i<=n;i++){
if(IQ[i]>=0){
for(int j=IQ[i];j<=8e5;j++){
// if(dp[(i+1)%2][j-IQ[i]]==-inf)continue;
dp[i%2][j]=max(dp[(i+1)%2][j],dp[(i+1)%2][j-IQ[i]]+EQ[i]);
}
}
else{
for(int j=0;j<=8e5+IQ[i];j++){
// if(dp[(i+1)%2][j-IQ[i]]==-inf)continue; //该行被注释就过了
dp[i%2][j]=max(dp[(i+1)%2][j],dp[(i+1)%2][j-IQ[i]]+EQ[i]);
}
}
}
int MAX=0;
for(int i=4e5;i<=8e5;i++){
if(dp[n%2][i]>=0)MAX=max(MAX,i-zero+dp[n%2][i]);
}
printf("%d\n",MAX);
}
int main()
{
int t=1;
// scanf("%d",&t);
while(t--)
work();
return 0;
}