#include using namespace std; #undef _P #define _P(...) (void)printf(__VA_ARGS__) #define FOR(i,a,b) for (int i = (a); i < (b); i++) #define RFOR(i,a,b) for (int i = (b)-1; i >= (a); i--) #define REP(i,n) for (int i = 0; i < (n); i++) #define RREP(i,n) for (int i = (n)-1; i >= 0; i--) #define ALL(x) (x).begin(), (x).end() #define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++) #define RITR(x,c) for(__typeof(c.rbegin()) x=c.rbegin();x!=c.rend();x++) #define MP(x,y) make_pair((x), (y)) #define MIN(a,b) (a < b ? a : b) #define MAX(a,b) (a > b ? a : b) #define SZ(x) ((int)(x).size()) #define ZERO(a) memset(a,0,sizeof(a)) #define MINUS(a) memset(a,0xff,sizeof(a)) #define FILL_3F(a) memset(a,0x3f,sizeof(a)) #define FILL_F3(a) memset(a,0xf3,sizeof(a)) #define bitcount(b) __builtin_popcount(b) #define GCD(a,b) (__gcd(a,b)) #define GCD3(a,b,c) (GCD(GCD(a,b), c)) #define LCM(a,b) (a/GCD(a,b)*b) #define LCM3(a,b,c) LCM(LCM(a,b),c) #define MOD 1000000007 template inline bool amax(T &a, const T &b) { if (a < b) { a = b; return 1; } return 0; } template inline bool amin(T &a, const T &b) { if (b < a) { a = b; return 1; } return 0; } typedef long long ll; // ------------------------------------- int N, M; int W[3330]; int dp[3330][2][2][3330]; // pos, first, last, get int main() { cin >> N >> M; REP(i, N) cin >> W[i]; FILL_F3(dp); dp[0][0][0][0] = 0; REP(p, N + 1) REP(uf, 2) REP(up, 2) REP(m, M + 1) { if (m <= M) { int fb = (p == N - 1 && uf) ? W[p] : 0; int a = (up && p >= 1) ? W[p - 1] : 0; amax(dp[p + 1][uf || p == 0][1][m + 1], dp[p][uf][up][m] + a + fb); } amax(dp[p + 1][uf][0][m], dp[p][uf][up][m]); } /* REP(p, N + 1) REP(uf, 2) REP(up, 2) REP(m, M + 1) { _P("dp[%d][%d][%d][%d] = %d\n", p, uf, up, m, dp[p][uf][up][m]); } */ int ans = -MOD; REP(uf, 2) REP(up, 2) amax(ans, dp[N][uf][up][M]); cout << ans << '\n'; return 0; }