#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> bz;
vector<bool> visited;
int dp[110][5010][110];
int dfs(int id, int T, int m){
if(T <= 0 || id >= bz.size())
return 0;
//选
int r1 = 0;
if(bz[id].first > 30 && m > 0 && T >= bz[id].first){
if(dp[id + 1][T - bz[id].first][m - 1] == - 1)
dp[id + 1][T - bz[id].first][m - 1] = dfs(id + 1, T - bz[id].first, m - 1);
r1 = dp[id + 1][T - bz[id].first][m - 1] + bz[id].second;
}else if(bz[id].first <= 30 && T >= bz[id].first){
if(dp[id + 1][T - bz[id].first][m] == -1)
dp[id + 1][T - bz[id].first][m] = dfs(id + 1, T - bz[id].first, m);
r1 = dp[id + 1][T - bz[id].first][m] + bz[id].second;
}
//不选
if(dp[id + 1][T][m] == -1)
dp[id + 1][T][m] = dfs(id + 1, T, m);
int r2 = dp[id + 1][T][m];
return max(r1, r2);
}
int main() {
int n, T, m;
cin>>n>>T>>m;
for(int i = 0; i < n + 5; ++i)
for(int j = 0; j < T + 5; ++j)
for(int k = 0; k < m + 5; ++k)
dp[i][j][k] = -1;
for(int i = 0; i < n; ++i){
pair<int, int> temp;
cin>>temp.first>>temp.second;
bz.push_back(temp);
visited.push_back(false);
}
cout<<dfs(0, T, m);
}
// 64 位输出请用 printf("%lld")