#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define fori(a,b) for(int i=a;i<b;i++)
#define ford(b,a) for(int i=b;i>=a;i--)
typedef pair<int, int> pi;
#define PI 3.14159265359
long long mod=1000000007;
//int count=INT_MAX;

struct hash_pair { 
    template <class T1, class T2> 
    size_t operator()(const pair<T1, T2>& p) const
    { 
        auto hash1 = hash<T1>{}(p.first); 
        auto hash2 = hash<T2>{}(p.second); 
        return hash1 ^ hash2; 
    } 
};
ll divCount(int n) 
{ 
    // sieve method for prime calculation 
    bool hash[n + 1]; 
    memset(hash, true, sizeof(hash)); 
    for (int p = 2; p * p < n; p++) 
        if (hash[p] == true) 
            for (int i = p * 2; i < n; i += p) 
                hash[i] = false; 
  
    // Traversing through all prime numbers 
    ll total = 1; 
    for (int p = 2; p <= n; p++) { 
        if (hash[p]) { 
  
            // calculate number of divisor 
            // with formula total div =  
            // (p1+1) * (p2+1) *.....* (pn+1) 
            // where n = (a1^p1)*(a2^p2)....  
            // *(an^pn) ai being prime divisor 
            // for n and pi are their respective  
            // power in factorization 
            ll count = 0; 
            if (n % p == 0) { 
                while (n % p == 0) { 
                    n = n / p; 
                    count++; 
                } 
                total = total * (count + 1LL); 
            } 
        } 
    } 
    return total; 
} 
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int testcases=1;
    //cin>>testcases;
    //cout<<t;
    //scanf("%d",&t);
    while(testcases--){  
        // int n;
        // cin>>n;
        // ll ans=0;
        // fori(1,n+1){
        //     int c=divCount(i);
        //     ans+=(ll)((ll)c*(ll)i);
        // }
        // cout<<ans<<endl;
        ll n,m,k;
        cin>>n>>m>>k;
        ll a[n],b[m];
        ll sa[n],sb[m];
        fori(0,n){
            cin>>a[i];
            if(i==0) sa[i]=a[i];
            else sa[i]=sa[i-1]+a[i];
        }
        fori(0,m){
            cin>>b[i];
            if(i==0) sb[i]=b[i];
            else sb[i]=sb[i-1]+b[i];
        }
        int c=0;
        fori(0,n){
            ll r=k-sa[i];
            if(r<0) break;
            int j=upper_bound(sb,sb+m,r)-sb;
            j--;
            c=max(c,i+j+2);
        }
        fori(0,m){
            ll r=k-sb[i];
            if(r<0) break;
            int j=upper_bound(sa,sa+n,r)-sa;
            j--;
            c=max(c,i+j+2);
        }
        cout<<c<<endl;
        //sort(a,a+n);
        //sort(b,b+m);
        // ll sum=0;
        // int c=0;
        // int i=0,j=0;
        // while(i<n&&j<m){
        //     sum+=(ll)min(a[i],b[j]);
        //     if(sum>k){
        //         break;
        //     }
        //     c++;
        //     if(a[i]<b[j]) i++;
        //     else if(a[i]>b[j]) j++;
        //     else{
        //         int i1=i,j1=j;
        //         while(i1<n&&j1<m&&a[i1]==b[j1]){
        //             i1++;
        //             j1++;
        //         }
        //         if(i1==n) i++;
        //         else if(j1==m) j++;
        //         else if(a[i1]<b[j1]) i++;
        //         else if(a[i1]>b[j1]) j++;
        //     }
        // }
        // if(sum<=(ll)k){
        //     if(i<n){
        //         while(i<n){
        //             sum+=(ll)a[i];
        //             if(sum>k){
        //                 break;
        //             }
        //             c++;
        //             i++;
        //         }
        //     }
        //     else if(j<m){
        //         while(j<m){
        //             sum+=(ll)b[j];
        //             if(sum>k){
        //                 break;
        //             }
        //             c++;
        //             j++;
        //         }
        //     }
        // }
        // cout<<c<<endl;

    }
    
    return 0;
}
 


Measured memory_bytes: 9864