#include <bits/stdc++.h>
using namespace std;
const int MaxN = 100005;
int a[MaxN], ax[MaxN], r[MaxN], mp[MaxN];
long long s[MaxN];
int N, M, K, cnt;
long long tr[2][MaxN];
bool cmpR(const int& i, const int& j) { return ax[i] < ax[j]; }
void init() {
  ax[N] = 0;
  for (int i = 0; i <= N; i++) {
    r[i] = i;
    s[i] = (i == 0 ? 0 : s[i - 1]) + ax[i];
  }
  sort(r, r + N + 1, cmpR);
  mp[1] = ax[r[0]];
  ax[r[0]] = K = 1;
  for (int i = 1; i <= N; i++) {
    if (ax[r[i]] == mp[K])
      ax[r[i]] = K;
    else
      mp[++K] = ax[r[i]], ax[r[i]] = K;
  }
}
void add(int k, int v) {
  int value = mp[k];
  while (k <= K) {
    tr[0][k] += v;
    tr[1][k] += value * v;
    k += k & -k;
  }
}
pair<long long, long long> read(int k) {
  pair<long long, long long> ret = make_pair(0LL, 0LL);
  while (k) {
    ret.first += tr[0][k];
    ret.second += tr[1][k];
    k -= k & -k;
  }
  return ret;
}
int find(int k) {
  int idx = 0;
  for (int i = 20; i >= 0; i--) {
    idx ^= 1 << i;
    if (idx <= K && tr[0][idx] < k)
      k -= tr[0][idx];
    else
      idx ^= 1 << i;
  }
  return idx + 1;
}
long long findS(int k) {
  int v = find(k);
  pair<long long, long long> res = read(v - 1);
  long long ret = res.second;
  ret += (k - res.first) * mp[v];
  return -ret;
}
long long getS(int L, int R) {
  if (L == 0)
    return s[R];
  else
    return s[R] - s[L - 1];
}
long long maxAdd() {
  int x = read(ax[N] - 1).first;
  x = min(x, cnt);
  return 2 * findS(x);
}
long long sol() {
  long long ret = 0;
  for (int i = 0; i + M <= N; i++) {
    if (i == 0) {
      for (int j = 0; j < M; j++) add(ax[j], 1);
    } else {
      add(ax[i - 1], -1);
      add(ax[i + M - 1], 1);
    }
    ret = max(ret, getS(i, i + M - 1) + maxAdd());
  }
  return ret;
}
int main() {
  long long ret;
  while (scanf("%d%d", &N, &M) == 2) {
    for (int i = 0; i < N; i++) {
      scanf("%d", &a[i]);
      ax[i] = a[i];
    }
    ret = 0;
    init();
    memset(tr, 0, sizeof(tr));
    scanf("%d", &cnt);
    ret = sol();
    for (int i = 0; i < N; i++) ax[i] = -a[i];
    init();
    memset(tr, 0, sizeof(tr));
    ret = max(ret, sol());
    printf("%I64d\n", ret);
  }
  return 0;
}
