#include <bits/stdc++.h>
using namespace std;
int st[201010], qt[201010];
void upd(int b, int l, int r, int p, int v) {
  if (p < l || r < p) return;
  if (l == r) {
    st[b] += (p / 2) * v;
    qt[b] += v;
    return;
  }
  int fe = b << 1, fd = fe | 1, mid = (l + r) >> 1;
  upd(fe, l, mid, p, v), upd(fd, mid + 1, r, p, v);
  st[b] = st[fe] + st[fd];
  qt[b] = qt[fe] + qt[fd];
}
int get(int b, int l, int r, int k) {
  if (!k) return 0;
  if (k >= qt[b]) return st[b];
  if (l == r) return (l / 2) * k;
  int fe = b << 1, fd = fe | 1, mid = (l + r) >> 1;
  int dir = min(k, qt[fd]);
  return get(fe, l, mid, k - dir) + get(fd, mid + 1, r, dir);
}
int n, k, tot, vet[201010], t[201010], ans;
int main() {
  scanf("%d%d%d", &n, &k, &tot);
  for (int(i) = (0); (i) < (n); (i)++) scanf("%d", vet + i);
  for (int(i) = (0); (i) < (n); (i)++) scanf("%d", t + i);
  int q = 0, tt = 0, cur = 0;
  for (int(i) = (n - 1); (i) >= (0); (i)--) {
    upd(1, 0, 10101, t[i], 1);
    tt += t[i];
    cur += vet[i];
    while (tt - get(1, 0, 10101, k) > tot) {
      tt -= t[i + q];
      upd(1, 0, 10101, t[i + q], -1);
      cur -= vet[i + q];
      q--;
    }
    ans = max(ans, cur);
    q++;
  }
  printf("%d\n", ans);
}
