#include <bits/stdc++.h>
using namespace std;
const long long size = 400011;
const long long mod = 1000000007;
void PLL(initializer_list<long long> li) {
  for (auto beg = li.begin(); beg != li.end(); beg++) {
    if (beg != li.begin()) cout << ' ';
    cout << *beg;
  }
  cout << endl;
}
const long long Inf = ~0ull >> 2;
long long sum[size * 4], cnt[size * 4], hsum[size];
void add(int p, int l, int r, int id, int x, int d) {
  cnt[p] += d;
  sum[p] += d * x;
  hsum[p] += (x + 1) / 2 * d;
  if (l == r) {
    return;
  }
  if (((l + r) / 2) >= id)
    add(p * 2, l, ((l + r) / 2), id, x, d);
  else
    add(p * 2 + 1, ((l + r) / 2) + 1, r, id, x, d);
}
long long get(int p, int l, int r, int x) {
  if (x >= cnt[p]) return hsum[p];
  if (x == 0) return sum[p];
  if (l == r) {
    return (l + 1) / 2 * x + (cnt[p] - x) * l;
  }
  return get(p * 2 + 1, ((l + r) / 2) + 1, r, x) +
         get(p * 2, l, ((l + r) / 2), max(0ll, x - cnt[p * 2 + 1]));
}
long long a[size];
long long t[size];
int n, w, k;
int main() {
  cin >> n >> w >> k;
  for (int i = 1; i <= n; i++) {
    cin >> t[i];
    t[i + n] = t[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    a[n + i] = a[i];
  }
  for (int i = 1; i <= n * 2; i++) t[i] += t[i - 1];
  long long ans = 0, r = 0;
  for (long long l = 1; l <= n; l++) {
    r = max(r, l - 1);
    while (r <= n && get(1, 1, 2e4, w) <= k) {
      r++;
      add(1, 1, 2e4, a[r], a[r], 1);
    }
    add(1, 1, 2e4, a[r], a[r], -1);
    r--;
    ans = max(ans, t[r] - t[l - 1]);
    if (l != r - 1) add(1, 1, 2e4, a[l], a[l], -1);
  }
  cout << ans << endl;
}
