#include <bits/stdc++.h>
using namespace std;
const double PI = 2.0 * acos(0.0);
inline int getInt() {
  int x;
  scanf("%d", &x);
  return x;
}
inline long long getLL() {
  long long x;
  scanf("%lld", &x);
  return x;
};
inline int NUM(char c) { return (int)c - 48; }
inline char CHR(int n) { return (char)(n + 48); }
template <class T>
inline T MAX(T a, T b) {
  if (a > b) return a;
  return b;
}
template <class T>
inline T MIN(T a, T b) {
  if (a < b) return a;
  return b;
}
template <class T>
inline T ABS(T a) {
  if (a < 0) return -a;
  return a;
}
inline void OPEN(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
int N, len;
int A[100111 + 5];
int K;
long long BIT1[100111 + 5], BIT2[100111 + 5];
void add(int x, int n, long long BIT[]) {
  for (++x; x <= 100111; x += x & -x) {
    BIT[x] += n;
  }
}
long long query(int x, long long BIT[]) {
  long long ret = 0;
  for (++x; x > 0; x -= x & -x) {
    ret += BIT[x];
  }
  return ret;
}
long long Q(int a, int b, long long BIT[]) {
  if (a > b) return 0;
  if (a < 0) return 1000111000111000111LL;
  if (a == 0) return query(b, BIT);
  return query(b, BIT) - query(a - 1, BIT);
}
vector<int> sorted;
int main() {
  scanf("%d%d", &N, &len);
  for (int i = 0, _n = (N); i < _n; i++) scanf("%d", &A[i]);
  scanf("%d", &K);
  for (int i = 0, _n = (N); i < _n; i++) sorted.push_back(abs(A[i]));
  sort((sorted).begin(), (sorted).end());
  sorted.resize(unique((sorted).begin(), (sorted).end()) - sorted.begin());
  long long ret = -1000111000111000111LL;
  for (int xx = 0, _n = (2); xx < _n; xx++) {
    memset(BIT1, 0, sizeof(BIT1));
    memset(BIT2, 0, sizeof(BIT2));
    long long sum = 0;
    for (int i = 0, _n = (len - 1); i < _n; i++) {
      sum += A[i];
      if (A[i] < 0) {
        int idx = lower_bound((sorted).begin(), (sorted).end(), -A[i]) -
                  sorted.begin();
        add(idx, -A[i], BIT1);
        add(idx, 1, BIT2);
      }
    }
    for (int i = (len - 1), _b = (N - 1); i <= _b; i++) {
      sum += A[i];
      if (i - len >= 0) sum -= A[i - len];
      if (A[i] < 0) {
        int idx = lower_bound((sorted).begin(), (sorted).end(), -A[i]) -
                  sorted.begin();
        add(idx, -A[i], BIT1);
        add(idx, 1, BIT2);
      }
      if (i - len >= 0 && A[i - len] < 0) {
        int idx = lower_bound((sorted).begin(), (sorted).end(), -A[i - len]) -
                  sorted.begin();
        add(idx, A[i - len], BIT1);
        add(idx, -1, BIT2);
      }
      long long tmp = 0;
      if (Q(0, N - 1, BIT2) <= K)
        tmp = 2 * Q(0, N - 1, BIT1);
      else {
        int lo = 0, hi = N - 1;
        while (lo <= hi) {
          int mid = (lo + hi) >> 1;
          long long f1 = Q(mid, N - 1, BIT2);
          long long f2 = Q(mid + 1, N - 1, BIT2);
          if (f1 >= K && f2 < K) {
            tmp = 2 * Q(mid, N - 1, BIT1);
            tmp -= (f1 - K) * 2 * (sorted[mid]);
            break;
          } else if (f1 >= K) {
            lo = mid + 1;
          } else {
            hi = mid - 1;
          }
        }
      }
      ret = MAX(ret, sum + tmp);
    }
    for (int i = 0, _n = (N); i < _n; i++) A[i] = -A[i];
  }
  cout << ret << endl;
  return 0;
}
