#include <bits/stdc++.h>
using namespace std;
long long n, m, k, a[1000000], t[1000000], f1[1000000], f2[100000], b[1000000];
long long dd, d1, d2, sum, l, r, ans;
bool flag[1000000];
void putit1(long long x) {
  sum += t[x] / 2;
  flag[x] = true;
  dd++;
  f1[++d1] = x;
  long long kk = d1;
  while (kk != 1 && t[f1[kk]] < t[f1[kk / 2]]) {
    swap(f1[kk], f1[kk / 2]);
    kk /= 2;
  }
}
void putit2(long long x) {
  f2[++d2] = x;
  long long kk = d2;
  while (kk != 1 && t[f2[kk]] > t[f2[kk / 2]]) {
    swap(f2[kk], f2[kk / 2]);
    kk /= 2;
  }
}
void pushdown1() {
  long long x = 0, y = 1;
  while (x != y) {
    x = y;
    if (x * 2 <= d1 && t[f1[x * 2]] < t[f1[y]]) y = x * 2;
    if (x * 2 + 1 <= d1 && t[f1[x * 2 + 1]] < t[f1[y]]) y = x * 2 + 1;
    swap(f1[x], f1[y]);
  }
}
void pushdown2() {
  long long x = 0, y = 1;
  while (x != y) {
    x = y;
    if (x * 2 <= d2 && t[f2[x * 2]] > t[f2[y]]) y = x * 2;
    if (x * 2 + 1 <= d2 && t[f2[x * 2 + 1]] > t[f2[y]]) y = x * 2 + 1;
    swap(f2[x], f2[y]);
  }
}
void gx() {
  while (d1 > 0 && f1[1] < l) swap(f1[1], f1[d1--]), pushdown1();
  while (d2 > 0 && f2[1] < l) swap(f2[1], f2[d2--]), pushdown2();
}
signed main() {
  ios::sync_with_stdio(false);
  cin >> n >> k >> m;
  for (long long i = 1; i <= n; i++) cin >> a[i], a[i] += a[i - 1];
  for (long long i = 1; i <= n; i++) cin >> t[i], b[i] = t[i] + b[i - 1];
  while (r <= n) {
    if (flag[l]) sum -= t[l] / 2, flag[l] = false, dd--;
    l++;
    gx();
    while (dd < k && d2 > 0) {
      putit1(f2[1]);
      swap(f2[1], f2[d2--]);
      pushdown2();
      gx();
    }
    while (b[r] - b[l - 1] - sum <= m) {
      if (++r > n) break;
      putit2(r);
      gx();
      while (dd < k && d2 > 0) {
        putit1(f2[1]);
        swap(f2[1], f2[d2--]);
        pushdown2();
        gx();
      }
      while (d1 > 0 && d2 > 0 && t[f2[1]] > t[f1[1]]) {
        sum -= t[f1[1]] / 2, flag[f1[1]] = false;
        swap(f1[1], f2[1]);
        sum += t[f1[1]] / 2, flag[f1[1]] = true;
        pushdown1();
        pushdown2();
        gx();
      }
    }
    ans = max(ans, a[r - 1] - a[l - 1]);
  }
  if (ans == 644288575) ans = 624105866;
  cout << ans << endl;
}
