#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=8e5+5;
int maxx=-0x3f3f3f3f;
int n;
int f[N];
struct node{
int s,f;
} cow[405];
int main() {
cin>>n;
for(int i=1;i<=n;i++)
cin>>cow[i].s>>cow[i].f;
memset(f,-0x3f,sizeof f);
f[400000]=0;
for(int i=1;i<=n;i++) {
if(cow[i].s>=0)
for(int j=800000;j>=cow[i].s;j--)
f[j]=max(f[j],f[j-cow[i].s]+cow[i].f);
else
for(int j=0;j<=800000+cow[i].s;j++)
f[j]=max(f[j],f[j-cow[i].s]+cow[i].f);
}
for(int i=400000;i<=800000;i++)
if(f[i]>=0)
maxx=max(maxx,f[i]+i-400000);
cout<<maxx<<endl;
return 0;
}