#include #include #include template std::vector vec(int len, T elem) { return std::vector(len, elem); } constexpr int INF = 1 << 30; void solve() { int n, k; std::cin >> n >> k; std::vector> ps(n); for (auto& p : ps) std::cin >> p.first >> p.second; std::sort(ps.rbegin(), ps.rend()); auto dp = vec(2, vec(k + 1, 0)); std::fill(dp[1].begin(), dp[1].end(), -INF); auto ndp = dp; for (auto [p, d] : ps) { for (int i = 0; i <= k; ++i) { ndp[0][i] = std::max(ndp[0][i], dp[1][i] + d); } for (int i = p; i <= k; ++i) { ndp[1][i - p] = std::max(ndp[1][i - p], dp[0][i] + d); } dp = ndp; } std::cout << std::max(dp[0][0], dp[1][0]) << "\n"; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); solve(); return 0; }