#include<stdio.h> #include<algorithm> using namespace std; int dp[3100][3100][2][2]; int c[3100]; int main(){ int a,b;scanf("%d%d",&a,&b); for(int i=0;i<2;i++)for(int j=0;j<2;j++) for(int k=0;k<a+10;k++)for(int l=0;l<b+10;l++)dp[k][l][i][j]=-999999999; for(int i=0;i<a;i++)scanf("%d",c+i); dp[0][0][0][0]=0; dp[0][1][1][1]=0; for(int i=1;i<a;i++){ for(int j=0;j<=b;j++){ if(i<a-1){ dp[i][j][0][0]=max(dp[i][j][0][0],max(dp[i-1][j][0][0],dp[i-1][j][1][0])); dp[i][j][0][1]=max(dp[i][j][0][1],max(dp[i-1][j][0][1],dp[i-1][j][1][1])); if(j){ dp[i][j][1][0]=max(dp[i][j][1][0],max(dp[i-1][j-1][0][0],dp[i-1][j-1][1][0]+c[i-1])); dp[i][j][1][1]=max(dp[i][j][1][1],max(dp[i-1][j-1][0][1],dp[i-1][j-1][1][1]+c[i-1])); } }else{ dp[i][j][0][0]=max(dp[i][j][0][0],max(dp[i-1][j][0][0],dp[i-1][j][1][0])); dp[i][j][0][1]=max(dp[i][j][0][1],max(dp[i-1][j][0][1],dp[i-1][j][1][1])); if(j){ dp[i][j][1][0]=max(dp[i][j][1][0],max(dp[i-1][j-1][0][0],dp[i-1][j-1][1][0]+c[i-1])); dp[i][j][1][1]=max(dp[i][j][1][1],max(dp[i-1][j-1][0][1]+c[a-1],dp[i-1][j-1][1][1]+c[i-1]+c[a-1])); } } } } int ret=-999999999; for(int i=0;i<2;i++)for(int j=0;j<2;j++)ret=max(ret,dp[a-1][b][i][j]); printf("%d\n",ret); }