use proconio::input; fn main() { input! { n: usize, m: usize, mut cards: [(usize, usize); n] } cards.sort_unstable_by_key(|t| t.0); let mut dp = vec![-1isize; m + 1]; dp[0] = 0; for &(c, d) in &cards { let max = m.saturating_sub(c) / 2; for i in (0..=max).rev() { if dp[i] == -1 { continue; } let j = i * 2 + c; dp[j] = dp[j].max(dp[i] + d as isize); } } let ans = dp.iter().max().unwrap(); println!("{}", ans); }