#pragma comment(linker, "/STACK:60777216") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long double ld; typedef long long ll; typedef pair pii; typedef pair pdd; typedef vector vi; typedef vector vd; typedef pair pl; #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define SORT(v) sort((v).begin(),(v).end()) #define UN(v) SORT(v),(v).erase(unique((v).begin(),(v).end()),(v).end()) #define CL(a,b) memset(a,b,sizeof a) #define pb push_back int n,k; int a[111111]; int solve(vi& a){ int sum = 0; int res = 0; REP(i,a.size()){ sum+=a[i]; if(sum<0)sum=0; res = max(res, sum); } return res; } int getsum(vi& a){ int x = 0; REP(i,a.size()) x+=a[i]; return x; } int getbeg(vi& a){ int best = 0; int sum = 0; REP(i,a.size()){ sum += a[i]; best=max(best,sum); } return best; } int eend[111111]; int beg[111111]; int all[111111]; int main(){ #ifdef LocalHost freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); #endif #ifndef LocalHost freopen("krasi.in","r",stdin); freopen("krasi.out","w",stdout); #endif cin>>n>>k; REP(i,n)scanf("%d",a+i); vector b; vi t; REP(i,n){ if(a[i]==0){ b.pb(t); t.clear(); }else{ t.pb(a[i]); } } if(!t.empty()) b.pb(t); int res = 0; REP(i,b.size()){ res=max(res,solve(b[i])); all[i] = getsum(b[i]); eend[i] = getbeg(b[i]); reverse(b[i].begin(),b[i].end()); beg[i] = getbeg(b[i]); } REP(i,b.size()){ int sum = beg[i]; for(int j = i + 1; j < min(i+k+1,(int)b.size());j++){ res=max(res,sum+eend[j]); sum += all[j]; } } cout<