#include using namespace std; #define rep(i,n) for(int i = 0; i < (n);i++) #define sz(x) int(x.size()) typedef long long ll; typedef pair P; constexpr ll INF = 1e18; int main(){ int n, K; cin >> n >> K; vector

A(n); rep(i,n) { int p, d; cin >> p >> d; A[i] = make_pair(p, d); } sort(A.begin(), A.end(), greater

()); vector> dp(K+1, vector(2,-INF)); dp[0][0] = 0; for (int i = 0; i < n; i++) { auto next = dp; for (int j = 0; j <= K; j++) { if (j + A[i].first <= K) next[j + A[i].first][1] = max(next[j + A[i].first][1], dp[j][0] + A[i].second); next[j][0] = max(next[j][0], dp[j][1] + A[i].second); next[j][0] = max(next[j][0], dp[j][0]); next[j][1] = max(next[j][1], dp[j][1]); } dp = next; } ll res = 0; for (int i = 0; i <= K; i++) res = max(res, max(dp[i][0], dp[i][1])); cout << res << endl; return 0; }