import java.util.*;
import java.io.*;
import java.math.BigDecimal; 
import java.math.BigInteger; 
class Main
{
	static boolean visited[];
	static long dp[][][];
	static long MOD=1000000007L;
	static Hashtable<String , Long>hash=new Hashtable<>();
	public static void main(String args[]) throws java.lang.Exception
	{
		BufferedReader inp = new BufferedReader (new InputStreamReader(System.in));
		// long n=Long.parseLong(inp.readLine());
		String h[]=inp.readLine().split(" ");
		String a[]=inp.readLine().split(" ");
		String b[]=inp.readLine().split(" ");
		long max=Long.parseLong(h[2]);
		long prea[]=new long[a.length];
		long preb[]=new long[b.length];
		Hashtable<Long,Integer>hasha=new Hashtable<>();
		Hashtable<Long,Integer>hashb=new Hashtable<>();
		TreeSet<Long>treea=new TreeSet<>();
		TreeSet<Long>treeb=new TreeSet<>();
		for(int i=0;i<a.length;i++){
			if(i==0){prea[i]=Long.parseLong(a[i]);}
			else{prea[i]=Long.parseLong(a[i])+prea[i-1];}
			treea.add(prea[i]);
			hasha.put(prea[i],i);
		}
		for(int i=0;i<b.length;i++){
			if(i==0){preb[i]=Long.parseLong(b[i]);}
			else{preb[i]=Long.parseLong(b[i])+preb[i-1];}
			treeb.add(preb[i]);
			hashb.put(preb[i],i);
		}
		Long a1=treea.floor(max);
		int y=a1==null?0:treea.headSet(a1).size()+1;
		Long b1=treeb.floor(max);
		int y1=b1==null?0:treeb.headSet(b1).size()+1;
		int ans=Math.max(y,y1);
		for(int i=0;i<a.length;i++)
		{
			if(prea[i]>max){break;}
			Long u=treeb.floor(max-prea[i]);
			int uu=u==null?0:hashb.get(u)+1;
			ans=Math.max(i+1+uu,ans);
		}
		for(int i=0;i<b.length;i++)
		{
			if(preb[i]>max){break;}
			Long u=treea.floor(max-preb[i]);
			int uu=u==null?0:hasha.get(u)+1;
			ans=Math.max(i+1+uu,ans);
		}
		System.out.println(ans);
	
		
		// // ArrayList<Long>k=new ArrayList<>();
		
		// System.out.println(ans);
// int dp[]=new int[n+1];
		


	}
	// static int get(int a[], int b[], int max, int i,int j)
	// {
	// 	if(max==0 || (i==a.length && j==b.length)){return 0;}
	// 	if()
	// }
	static long get(long x, String s, long arr[], int i,int a, int b)
	{
		if(i==s.length()){return x==0?1:2;}
		// String ss=i+" "+x;
		// if(hash.containsKey(ss)){return hash.get(ss);}
		if(dp[i][a][b]!=0){return dp[i][a][b];}
		if(s.charAt(i)=='1')
		{
				dp[i][a][b]=Math.max(get(x^arr[i],s,arr,i+1,a,b+1),get(x,s,arr,i+1,a,b));
		}
		else{
		dp[i][a][b]=Math.min(get(x^arr[i],s,arr,i+1,a+1,b),get(x,s,arr,i+1,a,b));}
		return dp[i][a][b];
	}

		// System.out.println(a);
		
	
	// static long get(int i,int pre, int n, int arr[],boolean visited[])
	// {
	// 	if(i==n){return 1;}
	// 	long ans=0;
	// 	if(dp[i][pre]!=-1){return dp[i][pre];}
	// 	if(arr[i]==1)
	// 	{
	// 		for(int k=pre+1;k<=n;k++)
	// 		{
	// 			if(!visited[k])
	// 			{
	// 				visited[k]=true;
	// 				ans=(ans%MOD+get(i+1,k,n,arr,visited)%MOD)%MOD;
	// 				visited[k]=false;
	// 			}
	// 		}
	// 		dp[i][pre]=ans;
	// 		return ans;
	// 	}
	// 	for(int k=1;k<pre;k++)
	// 	{
	// 		if(!visited[k])
	// 		{
	// 			visited[k]=true;
	// 			ans=(ans%MOD+get(i+1,k,n,arr,visited)%MOD)%MOD;
	// 			visited[k]=false;
	// 		}
	// 	}
	// 	dp[i][pre]=ans;
	// 	return ans;

	// }
	// static long getall(int gg[], long arr[][], int i, int g)
	// {
	// 	if(i==arr.length)
	// 	{
	// 		long ans=0;
	// 		for(int j=0;j<=g;j++)
	// 		{
	// 			ArrayList<Integer>arr1=new ArrayList<>();
	// 			for(int k=0;k<gg.length;k++)
	// 			{
	// 				if(gg[k]==j){arr1.add(k);}
	// 			}
	// 			for(int k=0;k<arr1.size()-1;k++)
	// 			{
	// 				for(int l=k+1;l<arr1.size();l++)
	// 				{
	// 					ans+=arr[arr1.get(k)][arr1.get(l)];
	// 				}
	// 			}
	// 		}
	// 		return ans;
	// 	}
	// 	String s=Arrays.toString(gg);
	// 	// if(hash.containsKey(s)){return hash.get(s);}
	// 	if(dp[i][g]!=0){return dp[i][g];}
	// 	gg[i]=g+1;
	// 	long max=getall(gg,arr,i+1,g+1);
	// 	for(int k=0;k<=g;k++)
	// 	{
	// 		gg[i]=k;
	// 		max=Math.max(getall(gg,arr,i+1,g),max);
	// 	}
	// 	dp[i][g]=max;
	// 	// hash.put(s,max);
	// 	return max;
	// }
	// static boolean prime(long n)
	// {
	// 	if(n==1){return false;}
 //        if (n <= 3) 
 //            return true; 
  
 //        if (n % 2 == 0 || n % 3 == 0) 
 //            return false; 
  
 //        for (int i = 5; i * i <= n; i = i + 6) 
 //            if (n % i == 0 || n % (i + 2) == 0) 
 //                return false; 
  
 //        return true; 
	// }
	// static int[] gg(String y){
	// 	int a[]=new int[y.length()];
	// 	for(int i=0;i<y.length();i++)
	// 	{
	// 		a[i]=(int)y.charAt(i)-(int)'0';
	// 	}
	// 	return a;
	// }
	// static long get(int a[], int d, int sum, int tight, int i)
	// {
	// 	if(i==a.length){if(sum%d==0){return 1;}return 0;}
	// 	// if(dp[i][sum][tight]!=-1){return dp[i][sum][tight];}
	// 	// String s=i+" "+sum+" "+tight;
	// 	if(dp[i][sum][tight]!=-1){return dp[i][sum][tight];}
	// 	long ans=0;
		
	// 	int limit=(tight==0?9:a[i]);
	// 		for(int j=0;j<=limit;j++)
	// 		{
	// 			int newt=(a[i]==j?tight:0);

	// 			ans=(ans%MOD+get(a,d,(sum+j)%d,newt,i+1)%MOD)%MOD;
	// 		}
	// 		dp[i][sum%d][tight]=ans;
	// 		// hash.put(s,ans);
	// 		return ans;	
	// }


	
	// static long bfs(int src, ArrayList<ArrayList<Integer>>arr)
	// {
	// 	Queue<Pair>q=new LinkedList<>();
	// 	q.add(new Pair(src,1,1));
	// 	visited[src]=true;
	// 	long ans=0;
	// 	while(q.size()!=0)
	// 	{
	// 		ans=0;
	// 		int size=q.size();
	// 		for(int j=0;j<size;j++)
	// 		{
	// 			Pair t=q.poll();
	// 			ans=(ans%MOD+(t.b%MOD+t.c%MOD)%MOD)%MOD;
	// 			for(Integer node:arr.get(t.a))
	// 			{
	// 				if(!visited[node])
	// 				{
	// 					visited[node]=true;
	// 					q.add(new Pair(node,t.b+t.c,t.b));
	// 				}
	// 			}
	// 		}
	// 	}
	// 	return ans%MOD;
	// }
}
class Pair
{
	
	long a;
	long b;
	Pair(long f, long h)
	{
		
		a=f;
		b=h;
	}
}

Measured memory_bytes: 138348