use proconio::input; fn main() { input! { n: usize, d: usize, k: usize, a: [i64; n], c: [usize; n], } let mut dpi = vec![vec![Option::::None; d + 1]; k + 1]; let mut dpi_nxt = dpi.clone(); dpi[0][0] = Some(0); for (&ai, &ci) in a.iter().zip(&c) { dpi_nxt.clone_from(&dpi); for j in 0..=k { let mut nj = j + ci; if nj > k { nj = k; } for l in 0..d { let Some(tmp) = dpi[j][l] else { continue; }; if dpi_nxt[nj][l + 1].is_some_and(|x| x >= tmp + ai) { continue; } dpi_nxt[nj][l + 1] = Some(tmp + ai); } } dpi.clone_from(&dpi_nxt); } if let Some(ans) = dpi[k][d] { println!("{ans}"); } else { println!("No"); } }