import 'dart:io';
import 'dart:math';


void main(List<String> arguments) {
  final nmk = stdin.readLineSync().split(' ').map((e) => int.parse(e)).toList();
  final n = nmk[0];
  final m = nmk[1];
  final k = nmk[2];
  final a = stdin.readLineSync().split(' ').map((e) => int.parse(e)).toList();
  final b = stdin.readLineSync().split(' ').map((e) => int.parse(e)).toList();
  final result = _c(n, m, k, a, b);
  print(result);
}

int _c(int N, int M, int K, List<int> A, List<int> B) {
  var t = B.fold(0, (pre, val) => pre + val);
  var j = M;
  var ans = 0;
  for (var i = 0; i < N + 1; i++) {
    while (j > 0 && t > K) {
      // 引き算して行って B 配列で最大読める分数の合計 t と　インデック j が得られる
      --j;
      t -= B[j];
    }
    if (t > K) break;
    ans = max(ans, i + j);
    if (i == N) break;
    t += A[i];
  }
  return ans;
}