fn main() { let (n, v, c) = { let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); let mut iter = line.split_whitespace(); ( iter.next().unwrap().parse::().unwrap(), iter.next().unwrap().parse::().unwrap(), iter.next().unwrap().parse::().unwrap(), ) }; let mut vw = Vec::new(); for _ in 0..n { vw.push({ let mut line = String::new(); std::io::stdin().read_line(&mut line).unwrap(); let mut iter = line.split_whitespace(); ( iter.next().unwrap().parse::().unwrap(), iter.next().unwrap().parse::().unwrap(), ) }); } let mut dp = vec![0; v + 1]; for &(price, value) in vw.iter() { for i in (price..=v).rev() { dp[i] = dp[i].max(dp[i - price] + value + c); } } for &(price, value) in vw.iter() { for i in price..=v { dp[i] = dp[i].max(dp[i - price] + value); } } let ans = *dp.iter().max().unwrap(); println!("{}", ans); }