#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct Treasure{
    int t,price;
    bool isHeavy;
};

int main() {
    int n,T,M;
    cin>>n>>T>>M;
    vector<Treasure> treasure(n);
    
    for(int i=0;i<n;i++){
        int a,b;
        cin>>a>>b;
        treasure[i]={a,b,a>30};
    }
    
    // dp[j][k]:时间不超过j,且使用了恰好k个重型宝藏时的最大价值
    vector<vector<int>> dp(T+1,vector<int>( M+1,0 ));
   
    for(const auto& item : treasure){
        int t=item.t;
        int p=item.price;
        bool heavy=item.isHeavy;

        for(int j=T;j>=t;j--){
            if(!heavy){
                // 情况1:普通宝藏,不占用重型配额
                // 它可以从任意重型数量k的状态转移过来
                for(int k=0;k<=M;k++){
                    dp[j][k]=max(dp[j][k],dp[j-t][k]+p);
                }
            }else{
                // 情况2:重型宝藏,必须占用一个重型配额 (k从1开始)
                for(int k=1;k<=M;k++){
                    dp[j][k]=max(dp[j][k],dp[j-t][k-1]+p);
                }
            }
        }
    }

    int maxp=0;
    for(int j=0;j<=T;j++){
        for(int k=0;k<=M;k++){
            maxp=max(maxp,dp[j][k]);
        }
    }

    cout<<maxp<<endl;
    return 0;

}