#include <bits/stdc++.h>
using namespace std;
enum STATE { IN, OUT, BOUNDRY };
const long long MOD = 1000000007;
const int INF = 2000 * 1000 * 1000 + 5;
const int MAX = 1005;
int main() {
  int n, len;
  cin >> n >> len;
  vector<int> v(n);
  for (int i = 0; i < n; i++) scanf("%d", &v[i]);
  int k;
  cin >> k;
  multiset<int> avpos, tkpos, avneg, tkneg;
  long long sum = 0;
  for (int i = 0; i < len; i++) {
    if (v[i] >= 0)
      avpos.insert(v[i]);
    else
      avneg.insert(v[i]);
    sum += v[i];
  }
  long long sumpos = 0, sumneg = 0;
  if (avpos.size()) {
    for (auto it = --avpos.end(); it != avpos.begin() && tkpos.size() < k;
         it--) {
      sumpos += *it;
      tkpos.insert(*it);
      avpos.erase(it++);
    }
    if (tkpos.size() < k)
      sumpos += *avpos.begin(), tkpos.insert(*avpos.begin()),
          avpos.erase(avpos.begin());
  }
  if (avneg.size()) {
    for (auto it = avneg.begin(); it != avneg.end() && tkneg.size() < k;) {
      sumneg += *it;
      tkneg.insert(*it);
      it = avneg.erase(it);
    }
  }
  long long ans = max(abs(sum - 2 * sumneg), abs(sum - 2 * sumpos));
  for (int i = len; i < n; i++) {
    sum += v[i] - v[i - len];
    multiset<int>::iterator it;
    if (v[i - len] >= 0) {
      it = avpos.find(v[i - len]);
      if (it != avpos.end())
        avpos.erase(it);
      else
        sumpos -= v[i - len], tkpos.erase(tkpos.find(v[i - len]));
    } else {
      it = avneg.find(v[i - len]);
      if (it != avneg.end())
        avneg.erase(it);
      else
        sumneg -= v[i - len], tkneg.erase(tkneg.find(v[i - len]));
    }
    if (v[i] >= 0)
      avpos.insert(v[i]);
    else
      avneg.insert(v[i]);
    if (k) {
      if (tkpos.size() < k && avpos.size()) {
        sumpos += *(--avpos.end());
        tkpos.insert(*(--avpos.end()));
        avpos.erase(--avpos.end());
      } else if (tkpos.size() == k && avpos.size()) {
        if (*tkpos.begin() < *(--avpos.end())) {
          sumpos += *(--avpos.end()) - *tkpos.begin();
          avpos.insert(*tkpos.begin());
          tkpos.erase(tkpos.begin());
          tkpos.insert(*(--avpos.end()));
          avpos.erase(--avpos.end());
        }
      }
      if (tkneg.size() < k && avneg.size()) {
        sumneg += *avneg.begin();
        tkneg.insert(*avneg.begin());
        avneg.erase(avneg.begin());
      } else if (tkneg.size() == k && avneg.size()) {
        if (*(--tkneg.end()) > *avneg.begin()) {
          sumneg += *avneg.begin() - *(--tkneg.end());
          avneg.insert(*(--tkneg.end()));
          tkneg.erase(--tkneg.end());
          tkneg.insert(*avneg.begin());
          avneg.erase(avneg.begin());
        }
      }
    }
    ans = max(ans, max(abs(sum - 2 * sumneg), abs(sum - 2 * sumpos)));
  }
  cout << ans << endl;
  return 0;
}
