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

struct Ramen {
    int s, a;
};

int main() {
    int N, I; cin >> N >> I;
    Ramen r[N];
    vector<vector<int>> dp(1006, vector<int>(1006, -1));
    for(int i = 0; i < N; i++) {
        cin >> r[i].s >> r[i].a;
    }
    dp[0][0] = 0;
    for(int i = 0; i < N; i++) {
        for(int j = 0; j <= I; j++) {
            if(dp[i][j] == -1) continue;
            dp[i + 1][r[i].s + j] = max(dp[i + 1][r[i].s + j], dp[i][j] + r[i].a);
            dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]);
        }
    }
    int ans = 0;
    for(int i = 0; i <= I; i++) {
        ans = max(ans, dp[N][i]);
    }
    cout << ans << endl;
}