#include using namespace std; using ll = long long; #define ALL(v) v.begin(),v.end() #define dbg(x) cerr << #x << ": " << (x) << endl; template ostream& operator<<(ostream& os, pair& p) { os << '(' << p.first << ',' << p.second << ')'; return os; } template void print(Iter beg, Iter end) { for (Iter itr = beg; itr != end; ++itr) { cerr << *itr << ' '; } cerr << '\n'; } int N; vector> A(3), S(3); int main() { cin >> N; for (int i = 0; i < 3; ++i) { A[i].resize(N); S[i].resize(N+1); for (int j = 0; j < N; ++j) { cin >> A[i][j]; S[i][j+1] = S[i][j] + A[i][j]; } } vector dp(3, vector(N+1)), dp2(2, vector(N+1)); dp[0] = S[0]; for (int i = 1; i < 3; ++i) { for (int j = 0; j < N; ++j) { dp[i][j+1] = max(dp[i][j] + A[i][j], dp[i-1][j] + A[i][j]); } } // for (int i = 0; i < 3; ++i) { // for (int j = 0; j <= N; ++j) { // cerr << dp[i][j] << " \n"[j==N]; // } // } // dp2 for (int i = N-1; i >= 0; --i) { dp2[0][i] = dp2[0][i+1] + A[0][i]; } for (int j = N-1; j >= 0; --j) { dp2[1][j] = max(dp2[1][j+1] + A[1][j], dp2[0][j+1] + A[1][j]); } // for (int i = 0; i < 2; ++i) { // for (int j = 0; j <= N; ++j) { // cerr << dp2[i][j] << " \n"[j==N]; // } // } // dp3 auto dp3 = dp; for (int j = 0; j < N; ++j) { dp3[2][j+1] = max(dp3[2][j] + A[0][j], dp3[1][j] + A[0][j]); } ll ans = 0; {// 0 1 0 for (int i = 0; i <= N; ++i) { ans = max(ans, dp[1][i] + S[0][N] - S[0][i]); } } {// 0 1 0 1 0 for (int i = 0; i <= N; ++i) { ans = max(ans, dp3[2][i] + dp2[1][i]); } } {// 0 1 2 0 for (int i = 0; i <= N; ++i) { ans = max(ans, dp[2][i] + S[0][N] - S[0][i]); } } {// 0 1 2 1 0 for (int i = 0; i <= N; ++i) { ans = max(ans, dp[2][i] + dp2[1][i]); } } {// 0 ans = max(ans, S[0][N]); } cout << ans << '\n'; }