#55350: 遞迴dp


61247091s@gapps.ntnu.edu.tw (wei)


#include <bits/stdc++.h>
using namespace std;

const int MAX=100;
int m[105][60005];

int cnt(int l,int n,int b[MAX][2]){
    if(l<0)return -1e9;
    if(l==0)return 0;
    if(n<0)return 0;
    if(m[l][n]!=-1)return m[l][n];
    int take=cnt(l-b[n][0],n-1,b)+b[n][1];
    int skip=cnt(l,n-1,b);

    m[l][n]=max(take,skip);

    return m[l][n];


}

int main(){
    int c;
    while(cin>>c){
        memset(m,-1,sizeof(m));
        int a[MAX][2];
        for(int i=0;i<c;i++)    cin>>a[i][0]>>a[i][1];
        cout<<cnt(100,c-1,a)<<endl;
    }return 0;
}