#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define MD 1000000007
template < class S, class T> inline S max_L( S a,T b) {
return a>= b? a: b;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int kConcatenationMaxSum( vector< int > & A, int k) {
int i;
int N = A.size ( ) ;
long long s;
long long m;
long long m1;
long long m2;
s = m = 0 ;
for ( i= 0 ; i< ( N) ; i++ ) {
s = max_L( s+ A[ i] , 0 ) ;
chmax( m, s) ;
}
s = m1 = 0 ;
for ( i= 0 ; i< ( N) ; i++ ) {
s + = A[ i] ;
chmax( m1, s) ;
}
s = m2 = 0 ;
for ( i= 0 ; i< ( N) ; i++ ) {
s + = A[ N- 1 - i] ;
chmax( m2, s) ;
}
if ( k >= 2 ) {
chmax( m, m1 + m2 + ( k- 2 ) * max_L( s, 0 ) ) ;
}
return m % MD;
}
}
;
// cLay varsion 20190914-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int kConcatenationMaxSum(vector<int>& A, int k) {
// int i, N = A.size();
// ll s, m, m1, m2;
//
// s = m = 0;
// rep(i,N){
// s = max(s+A[i], 0);
// m >?= s;
// }
//
// s = m1 = 0;
// rep(i,N){
// s += A[i];
// m1 >?= s;
// }
//
// s = m2 = 0;
// rep(i,N){
// s += A[N-1-i];
// m2 >?= s;
// }
//
// if(k >= 2) m >?= m1 + m2 + (k-2) * max(s, 0);
//
// return m % MD;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTUQgMTAwMDAwMDAwNwp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBtYXhfTChTIGEsVCBiKXsKICByZXR1cm4gYT49Yj9hOmI7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htYXgoUyAmYSwgVCBiKXsKICBpZihhPGIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQga0NvbmNhdGVuYXRpb25NYXhTdW0odmVjdG9yPGludD4mIEEsIGludCBrKXsKICAgIGludCBpOwogICAgaW50IE4gPSBBLnNpemUoKTsKICAgIGxvbmcgbG9uZyBzOwogICAgbG9uZyBsb25nIG07CiAgICBsb25nIGxvbmcgbTE7CiAgICBsb25nIGxvbmcgbTI7CiAgICBzID0gbSA9IDA7CiAgICBmb3IoaT0wO2k8KE4pO2krKyl7CiAgICAgIHMgPW1heF9MKHMrQVtpXSwgMCk7CiAgICAgIGNobWF4KG0sIHMpOwogICAgfQogICAgcyA9IG0xID0gMDsKICAgIGZvcihpPTA7aTwoTik7aSsrKXsKICAgICAgcyArPSBBW2ldOwogICAgICBjaG1heChtMSwgcyk7CiAgICB9CiAgICBzID0gbTIgPSAwOwogICAgZm9yKGk9MDtpPChOKTtpKyspewogICAgICBzICs9IEFbTi0xLWldOwogICAgICBjaG1heChtMiwgcyk7CiAgICB9CiAgICBpZihrID49IDIpewogICAgICBjaG1heChtLCBtMSArIG0yICsgKGstMikgKm1heF9MKHMsIDApKTsKICAgIH0KICAgIHJldHVybiBtICUgTUQ7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMTkwOTE0LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IGtDb25jYXRlbmF0aW9uTWF4U3VtKHZlY3RvcjxpbnQ+JiBBLCBpbnQgaykgewovLyAgICAgaW50IGksIE4gPSBBLnNpemUoKTsKLy8gICAgIGxsIHMsIG0sIG0xLCBtMjsKLy8gICAgIAovLyAgICAgcyA9IG0gPSAwOwovLyAgICAgcmVwKGksTil7Ci8vICAgICAgIHMgPSBtYXgocytBW2ldLCAwKTsKLy8gICAgICAgbSA+Pz0gczsKLy8gICAgIH0KLy8gICAgIAovLyAgICAgcyA9IG0xID0gMDsKLy8gICAgIHJlcChpLE4pewovLyAgICAgICBzICs9IEFbaV07Ci8vICAgICAgIG0xID4/PSBzOwovLyAgICAgfQovLyAgICAgCi8vICAgICBzID0gbTIgPSAwOwovLyAgICAgcmVwKGksTil7Ci8vICAgICAgIHMgKz0gQVtOLTEtaV07Ci8vICAgICAgIG0yID4/PSBzOwovLyAgICAgfQovLyAKLy8gICAgIGlmKGsgPj0gMikgbSA+Pz0gbTEgKyBtMiArIChrLTIpICogbWF4KHMsIDApOwovLyAgICAgCi8vICAgICByZXR1cm4gbSAlIE1EOwovLyAgIH0KLy8gfTsK