#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
set<pair<int, int> > st1, st2;
int sum, tim;
int a[maxn], t[maxn];
void add(set<pair<int, int> > &st, int k, int c) {
  st.insert(pair<int, int>(c * t[k], k));
  if (c > 0)
    tim += (t[k] + 1) >> 1;
  else
    tim += t[k];
  sum += a[k];
}
bool del(set<pair<int, int> > &st, int k, int c) {
  set<pair<int, int> >::iterator p = st.find(pair<int, int>(c * t[k], k));
  if (p == st.end()) return false;
  st.erase(p);
  if (c > 0)
    tim -= (t[k] + 1) >> 1;
  else
    tim -= t[k];
  sum -= a[k];
  return true;
}
int main() {
  int n, w, k;
  scanf("%d%d%d", &n, &w, &k);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  for (int i = 1; i <= n; ++i) scanf("%d", t + i);
  int ans = 0;
  tim = sum = 0;
  for (int i = n, j = n; i >= 1; --i) {
    if (st1.empty() || st1.size() < w) {
      add(st1, i, 1);
    } else {
      set<pair<int, int> >::iterator p = st1.begin();
      if (p->first < t[i]) {
        add(st2, p->second, -1);
        del(st1, p->second, 1);
        add(st1, i, 1);
      } else {
        add(st2, i, -1);
      }
    }
    while (tim > k) {
      if (!del(st2, j, -1)) {
        del(st1, j, 1);
        if (!st2.empty()) {
          add(st1, st2.begin()->second, 1);
          del(st2, st2.begin()->second, -1);
        }
      }
      --j;
    }
    if (j == n || k - (tim + t[j + 1]) < (t[j + 1] + 1) / 2)
      ans = max(ans, sum);
  }
  printf("%d\n", ans);
  return 0;
}
