use proconio::input; fn main() { input! { n: usize, a: [[i64; n]; 3], } let mut dp = [[-1; 2]; 5]; dp[0] = [0; 2]; for i in 0..n { let mut ndp = [[-1; 2]; 5]; for j in 0..5 { for k in 0..2 { if dp[j][k] == -1 { continue; } for nj in j..5 { // 01010 or 01210 let target = nj & 1 + if nj == 2 { 2 * k } else { 0 }; ndp[nj][k] = ndp[nj][k].max(dp[j][k] + a[target][i]); } } } dp = ndp; } let ans = dp.iter().flatten().max().unwrap(); println!("{ans}"); }