#include <bits/stdc++.h>
using namespace std;
int N, L, K;
int A[100000];
multiset<int> pl, mi, us;
long long res = -(1LL << 61), tt;
void insert(int t) {
  if (t >= 0)
    pl.insert(t), tt += t;
  else {
    us.insert(t), tt += abs(t);
    if (us.size() > K) {
      int f = *(--us.end());
      us.erase(--us.end());
      tt -= abs(f) * 2;
      mi.insert(f);
    }
  }
}
void erase(int t) {
  if (t >= 0)
    pl.erase(pl.lower_bound(t)), tt -= t;
  else if (mi.count(t))
    mi.erase(mi.lower_bound(t)), tt -= t;
  else {
    us.erase(us.lower_bound(t)), tt -= abs(t);
    if (mi.size()) {
      int f = *(mi.begin());
      mi.erase(mi.begin());
      us.insert(f);
      tt += abs(f) * 2;
    }
  }
}
int main() {
  scanf("%d%d", &N, &L);
  for (int(i) = 0; (i) < (N); (i)++) scanf("%d", &A[i]);
  scanf("%d", &K);
  for (int(_) = 0; (_) < (2); (_)++) {
    pl.clear(), mi.clear(), us.clear(), tt = 0;
    for (int(i) = 0; (i) < (L); (i)++) insert(A[i]);
    for (int(i) = 0; (i) < (N - L + 1); (i)++) {
      if (i != 0) {
        insert(A[i + L - 1]);
        erase(A[i - 1]);
      }
      res = max(res, tt);
    }
    for (int(i) = 0; (i) < (N); (i)++) A[i] *= -1;
  }
  cout << res << endl;
}
