use proconio::input; fn main() { input! { n: usize, k: usize, a: [i64; n], } let inf = 1i64 << 60; let mut dp = vec![[-inf; 2]; k + 1]; dp[0][0] = 0; for &a in &a { let mut ndp = vec![[-inf; 2]; k + 1]; for i in 0..=k { for j in 0..2 { if dp[i][j] == -inf { continue; } if i < k && j == 0 { let cand = dp[i][j] + a; ndp[i + 1][1] = ndp[i + 1][1].max(cand); } ndp[i][0] = ndp[i][0].max(dp[i][j]); } } dp = ndp; } let ans = dp[k].iter().copied().max().unwrap(); if ans == -inf { println!("Impossible"); } else { println!("{ans}"); } }