void main(){
	long n, m, k;
	readf("%d %d %d\n", &n, &m, &k);
	// 机Aから本を選択しない場合を読む時間0として追加
	long[] a = 0 ~ _scanln!long();
	long[] b = _scanln!long();
	long asum; // Aの選択分の読書量総計
	long ans;
	foreach(i, aelm; a){
		asum += aelm;
		if(asum > k)break; // 時間超過
		long cnt = i;
		long tmpk = k - asum;
		// 残りのk分をBから選択
		foreach(belm; b){
			if(tmpk >= belm){
				tmpk -= belm;
				cnt++;
			}else{
				break;
			}
		}
		if(cnt > ans)ans = cnt;
	}
	ans.writeln();
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math, std.range, std.container;

// 1要素のみの入力
T _scan(T= int)(){
	return to!(T)( readln().chomp() );
}

// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}
