#include <bits/stdc++.h>
using namespace std;
map<long long, int> m, r;
map<long long, int>::reverse_iterator it;
int n, len, k;
long long a[100005];
long long sum[100005], S, mS, rst, cnt;
long long rest[100005], rS;
long long ab(long long x) { return x < 0 ? -x : x; }
void go() {
  int i;
  for (i = 1; i <= n; i++) {
    if (a[i] > 0) {
      if (cnt < k)
        r[a[i]]++, S += a[i], cnt++;
      else {
        r[a[i]]++;
        S += a[i];
        S -= (*r.begin()).first;
        m[(*r.begin()).first]++;
        rS += (*r.begin()).first;
        if (--(*r.begin()).second == 0) r.erase((*r.begin()).first);
      }
    }
    if (i < len) continue;
    sum[i] = S;
    rest[i] = rS;
    long long x = a[i - len + 1];
    if (x > 0) {
      if (m.find(x) != m.end()) {
        rS -= x;
        if (--m[x] == 0) m.erase(x);
      } else if (r.find(x) != r.end()) {
        if (--r[x] == 0) r.erase(x);
        S -= x;
        cnt--;
        it = m.rbegin();
        if (it != m.rend()) {
          x = (*it).first;
          r[x]++;
          rS -= x;
          S += x;
          cnt++;
          if (--m[x] == 0) m.erase(x);
        }
      }
    }
  }
  for (i = 1; i < len; i++)
    if (a[i] < 0) mS += (-a[i]);
  for (i = len; i <= n; i++) {
    if (a[i] < 0) mS += (-a[i]);
    if (a[i - len] < 0) mS -= (-a[i - len]);
    rst = max(rst, ab(sum[i] + mS - rest[i]));
    if (rst == 28) {
      i = i;
    }
  }
}
int main() {
  int i;
  for (i = 1, scanf("%d%d", &n, &len); i <= n; i++) scanf("%I64d", &a[i]);
  scanf("%d", &k);
  go();
  r.clear();
  m.clear();
  S = 0;
  mS = 0;
  rS = 0;
  cnt = 0;
  for (i = 1; i <= n; i++) a[i] = -a[i];
  go();
  printf("%I64d", rst);
}
