#include #define fi first #define se second #define rep(i,s,n) for (int i = (s); i < (n); ++i) #define rrep(i,g,n) for (int i = (n)-1; i >= (g); --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define len(x) (int)(x).size() #define dup(x,y) (((x)+(y)-1)/(y)) #define pb push_back #define eb emplace_back #define Field(T) vector> using namespace std; using ll = long long; using ull = unsigned long long; template using pq = priority_queue,greater>; using P = pair; templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b> n >> b >> c; vector a(n); rep(i,0,n) cin >> a[i]; vector vb(n+1, -1), vc(n+1, -1); vb[0] = vc[0] = 0; multiset stb, stc; stb.emplace(0), stc.emplace(0); ll val = 0; rep(i,0,n) { vb[i+1] = (*stc.rbegin())+val; vc[i+1] = (*stb.rbegin())-val; val += a[i]; stb.emplace(vb[i+1]), stc.emplace(vc[i+1]); if (len(stb) > b) stb.erase(stb.find(vb[i-b+1])); if (len(stc) > c) stc.erase(stc.find(vc[i-c+1])); } cout << max((*stb.rbegin()), (*stc.rbegin())+val) << endl; return 0; }