#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const pair&p){ os< ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os<>n>>k>>m; rep(i,n){ cin>>a[i]; sum[i+1]=a[i]+sum[i]; } rep(j,k){ dequed1,d2;// dp-sum,dp+sum vectorsm1,sm2; rep(i,n+1){ while(!d1.empty() and dp[d1.back()][j]-sum[d1.back()]<=dp[i][j]-sum[i]) d1.pop_back(); d1.push_back(i); sm1.push_back(dp[d1.front()][j]-sum[d1.front()]); if(d1.front()==i-m+1) d1.pop_front(); } rep(i,n+1){ while(!d2.empty() and dp[d2.back()][j]+sum[d2.back()]<=dp[i][j]+sum[i]) d2.pop_back(); d2.push_back(i); sm2.push_back(dp[d2.front()][j]+sum[d2.front()]); if(d2.front()==i-m+1) d2.pop_front(); } rep(i,n){ chmax(dp[i+1][j+1],sm1[i]+sum[i+1]); chmax(dp[i+1][j+1],sm2[i]-sum[i+1]); } } cout<