#![allow(non_snake_case)] use proconio::input; const INF: i64 = 1_000_000_000_000_000_000; fn main() { input! { N: usize, D: usize, K: usize, A: [i64; N], C: [usize; N], } let mut dp = vec![vec![-INF * 2; K + 1]; D + 1]; dp[0][0] = 0; for i in 0 .. N { for count in (0 .. D).rev() { for beauty in (0 ..= K).rev() { let count_next = count + 1; let beauty_next = K.min(beauty + C[i]); let sat = dp[count_next][beauty_next].max(dp[count][beauty] + A[i]); dp[count_next][beauty_next] = sat; } } } if dp[D][K] >= -INF { println!("{}", dp[D][K]); } else { println!("No"); } }