9pts
#include <bits/stdc++.h>
using namespace std;
const int MAXN=405;
const int MAXJ=400000;
struct Cow{
int iq,eq;
}cow[MAXN];
int n,f[2*MAXJ+5];
int main()
{
memset(f,~0x3f3f3f3f,sizeof f);
scanf("%d",&n);
f[MAXJ]=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&cow[i].iq,&cow[i].eq);
}
for(int i=1;i<=n;i++){
if(cow[i].iq>0){
for(int j=MAXJ;j>=-MAXJ;j--){
if(-MAXJ<=j-cow[i].iq&&j-cow[i].iq<=MAXJ) f[j+MAXJ]=max(f[j+MAXJ],f[j-cow[i].iq+MAXJ]+cow[i].eq);
}
}
else{
for(int j=-MAXJ;j<=MAXJ;j++){
if(-MAXJ<=j-cow[i].iq&&j-cow[i].iq<=MAXJ) f[j+MAXJ]=max(f[j+MAXJ],f[j-cow[i].iq+MAXJ]+cow[i].eq);
}
}
}
int ans=0;
for(int j=0;j<=MAXJ;j++){
if(f[j+MAXJ]>=0) ans=max(f[j+MAXJ],ans);
}
printf("%d",ans);
return 0;
}