#include <bits/stdc++.h>
using namespace std;
long long solve(long long n, long long l, vector<long long> v, long long k) {
  vector<long long> sum(n + 1), neg(n + 1);
  vector<long long> negOcupados(n + 1, 0);
  for (long long i = 0; i < n; i++) {
    sum[i + 1] = v[i] + sum[i];
  }
  long long ocupados = 0;
  priority_queue<pair<long long, long long> > OcupadosMenorMayor,
      NoOcupadosMayorMenor;
  long long suma = 0;
  long long best = 0;
  long long j = 0;
  for (long long i = 0; i < n - l + 1; i++) {
    for (; j < i + l; j++) {
      if (v[j] < 0) {
        if (ocupados < k) {
          suma -= v[j];
          ocupados++;
          negOcupados[j] = 1;
          OcupadosMenorMayor.push(make_pair(v[j], j));
        } else {
          if (k != 0) {
            pair<long long, long long> P = OcupadosMenorMayor.top();
            while (negOcupados[P.second] == 0) {
              OcupadosMenorMayor.pop();
              P = OcupadosMenorMayor.top();
            }
            if (P.first >= v[j]) {
              negOcupados[P.second] = 0;
              negOcupados[j] = 1;
              suma += v[P.second];
              OcupadosMenorMayor.pop();
              NoOcupadosMayorMenor.push(make_pair(-P.first, P.second));
              OcupadosMenorMayor.push(make_pair(v[j], j));
              suma -= v[j];
            } else
              NoOcupadosMayorMenor.push(make_pair(-v[j], j));
          }
        }
      }
    }
    best = max(best, sum[i + l] - sum[i] + 2LL * suma);
    if (negOcupados[i] == 1) {
      suma += v[i];
      negOcupados[i] = 0;
      if (!NoOcupadosMayorMenor.empty()) {
        pair<long long, long long> P = NoOcupadosMayorMenor.top();
        bool J = true;
        while (P.second <= i) {
          NoOcupadosMayorMenor.pop();
          if (NoOcupadosMayorMenor.empty()) {
            J = false;
            break;
          }
          P = NoOcupadosMayorMenor.top();
        }
        if (J) {
          suma += P.first;
          negOcupados[P.second] = 1;
          NoOcupadosMayorMenor.pop();
          OcupadosMenorMayor.push(make_pair(-P.first, P.second));
        } else
          ocupados--;
      } else {
        ocupados--;
      }
    }
  }
  return best;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long n, l;
  cin >> n >> l;
  vector<long long> v(n);
  for (long long i = 0; i < n; i++) {
    cin >> v[i];
  }
  long long k;
  cin >> k;
  long long best = solve(n, l, v, k);
  for (long long i = 0; i < n; i++) {
    v[i] *= (-1);
  }
  best = max(best, solve(n, l, v, k));
  cout << best << "\n";
  return 0;
}
