#include #define all(vec) vec.begin(), vec.end() using namespace std; using ll = long long; using P = pair; constexpr ll INF = (1LL << 30) - 1LL; constexpr ll LINF = (1LL << 60) - 1LL; constexpr ll MOD = 1e9 + 7; template void chmin(T &a, T b) { a = min(a, b); } template void chmax(T &a, T b) { a = max(a, b); } int main() { cin.tie(0); ios::sync_with_stdio(false); int n, k; cin >> n >> k; vector

v; for (int i = 0; i < n; i++) { int p, d; cin >> p >> d; v.push_back(P(p, d)); } sort(all(v)); vector>> dp( n + 1, vector>(k + 1, vector(2, -INF))); dp[n][0][0] = 0; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j <= k; j++) { chmax(dp[i][j][0], dp[i + 1][j][0]); chmax(dp[i][j][1], dp[i + 1][j][1]); chmax(dp[i][j][0], dp[i + 1][j][1] + v[i].second); if (j >= v[i].first) { chmax(dp[i][j][1], dp[i + 1][j - v[i].first][0] + v[i].second); } } } int res = 0; for (int i = 0; i <= k; i++) { chmax(res, dp[0][i][0]); chmax(res, dp[0][i][1]); } cout << res << endl; }