#include <iostream>
#include<algorithm>
using namespace std;
int dp(int amount,int oblist[100][2],int max_weight){
int table[10000][10001];
for (int i=0;i<amount;i++){
for (int j=0;j<max_weight;j++){
if (i==0){
if (oblist[i][0]>j+1){
table[i][j]=0;
}
else{
table[i][j]=oblist[i][1];
}
}
else{
if (oblist[i][0]>j+1){
table[i][j]=table[i-1][j];}
else if(oblist[i][0]==j+1)
if (oblist[i][1]>=table[i-1][j]){
table[i][j]=oblist[i][1];
}
else{
table[i][j]=oblist[i-1][j];
}
else if (oblist[i][0]<j+1){
table[i][j]=max(table[i-1][j],oblist[i][1]+table[i-1][j-oblist[i][0]]);
}
}
}
}
return table[amount-1][max_weight-1];
}
int main(){
int n;
int objlist[100][2];
int w,v;
int max_weight;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>w>>v;
objlist[i][0]=w;
objlist[i][1]=v;
}
cin>>max_weight;
cout<<dp(n,objlist,max_weight)<<endl;
}
return 0;
}