#include <bits/stdc++.h>
using namespace std;
struct Set {
  multiset<int> s;
  long long sum;
  Set() { sum = 0; }
  void add(int x) {
    s.insert(x);
    sum += x;
  }
  bool remove(int x) {
    if (s.find(x) != s.end()) {
      s.erase(s.find(x));
      sum -= x;
      return true;
    }
    return false;
  }
  int getMin() {
    if (s.empty()) {
      return 0;
    }
    return *s.begin();
  }
  int getMax() {
    if (s.empty()) {
      return 0;
    }
    return *s.rbegin();
  }
};
const int N = 100005;
int a[N];
void addToPos(Set& all, Set& pos, int k, int x) {
  if (x <= 0) {
    return;
  }
  if ((int)pos.s.size() < k || x > pos.getMin()) {
    pos.add(x);
    all.remove(x);
  }
  if ((int)pos.s.size() > k) {
    all.add(pos.getMin());
    pos.remove(pos.getMin());
  }
}
void addToNeg(Set& all, Set& neg, int k, int x) {
  if (x >= 0) {
    return;
  }
  if ((int)neg.s.size() < k || x < neg.getMax()) {
    neg.add(x);
    all.remove(x);
  }
  if ((int)neg.s.size() > k) {
    all.add(neg.getMax());
    neg.remove(neg.getMax());
  }
}
void updateSets(Set& all, Set& pos, Set& neg, int k, int x, int y) {
  bool removed = all.remove(x);
  all.add(y);
  if (!removed) {
    removed = pos.remove(x);
  }
  addToPos(all, pos, k, y);
  if (!all.s.empty()) {
    addToPos(all, pos, k, *all.s.rbegin());
  }
  if (!removed) {
    removed = neg.remove(x);
  }
  addToNeg(all, neg, k, y);
  if (!all.s.empty()) {
    addToNeg(all, neg, k, *all.s.begin());
  }
}
int main() {
  int n, len;
  scanf("%d %d", &n, &len);
  for (int i = 0; i < n; ++i) {
    scanf("%d", a + i);
  }
  int k;
  scanf("%d", &k);
  Set all, pos, neg;
  for (int i = 0; i < len; ++i) {
    all.add(a[i]);
    addToPos(all, pos, k, a[i]);
    addToNeg(all, neg, k, a[i]);
  }
  long long res = all.sum + pos.sum + neg.sum;
  for (int i = 0; i + len <= n; ++i) {
    res = max(res, abs(all.sum + pos.sum + neg.sum));
    res = max(res, abs(all.sum + pos.sum - neg.sum));
    res = max(res, abs(all.sum - pos.sum + neg.sum));
    updateSets(all, pos, neg, k, a[i], a[i + len]);
  }
  printf("%lld\n", res);
}
