#include <bits/stdc++.h>
    using namespace std;
    long long MOD=1000000007;
    #define IOS() ios_base::sync_with_stdio(0); cin.tie(0);
    typedef long long ll;
    #define pb push_back
    typedef pair<ll,ll> pi;


  //   { //segment trees

  //   map<ll,ll> lazy;

    // void build( ll n , ll *a , ll *tree , ll s , ll e , ll index)
    // {
    //   if(s==e)
    //     tree[index]=a[e];

    //   else
    //   {
    //     ll mid=(s+e)/2;
    //     build(n , a , tree , s , mid , 2*index);
    //     build(n , a , tree , mid+1 , e , 2*index+1);
    //     tree[index]=std::max(tree[2*index], tree[2*index+1]);
    //   }
    //   return;
    // }
    
    // ll query( ll *tree, ll s, ll e ,ll qs, ll qe, ll index)
    // {
    //   if(qe<s || qs>e)
    //     return ll_MIN;

    //   else if(s>=qs && e<=qe)
    //     return tree[index];

    //   ll mid=(s+e)/2;
    //   ll left=query(tree,s,mid,qs,qe,2*index);
    //   ll right=query(tree,mid+1,e,qs,qe,2*index+1);
    //   return std::max(left,right);
    // }

    // void pollupdate(ll  *tree, ll s , ll e , ll i , ll inc , ll index)
    // {
    //   if(i<s || i>e)
    //     return;

    //   if(e==s){
    //     tree[index]+=inc;
    //     return;
    //   }

    //   ll mid=(s+e)/2;
    //   pollupdate(tree,s,mid,i,inc,2*index);
    //   pollupdate(tree,mid+1,e,i,inc,2*index+1);
    //   tree[index]=std::max(tree[2*index],tree[2*index+1]);
    //   return;

    // }

  //   void rangeupdate(ll *tree,ll s,ll e, ll l ,ll r , ll inc, ll index)
  //   {
  //     if(r<s || l>e)
  //       return;

  //     if(e==s)
  //     {
  //       tree[index]+=inc;
  //       return;
  //     }

  //     ll mid=(s+e)/2;
  //     rangeupdate(tree,s,mid,l,r,inc,2*index);
  //     rangeupdate(tree,mid+1,e,l,r,inc,2*index+1);
  //     tree[index]=std::min(tree[2*index],tree[2*index+1]);
  //     return;


  //   }

  //   void lazyupdate(ll *tree,ll s,ll e,ll l,ll r,ll inc,ll index)
  //   {
  //     //resolve
  //     if(lazy[index])
  //     {
  //       tree[index]+=lazy[index];

  //       if(s!=e){
  //         lazy[2*index]+=lazy[index];
  //         lazy[2*index+1]+=lazy[index];
  //       }

  //       lazy[index]=0;
  //     }

  //     //no overlap
  //     if(r<s || l>e)
  //       return;

  //     //complete
  //     if(s>=l && e<=r)
  //     {
  //       tree[index]+=inc;
  //       if(s!=e)
  //       {
  //         lazy[2*index]+=inc;
  //         lazy[2*index+1]+=inc;
  //       }

  //       return;
  //     }

  //     //partial
  //     //call both sides
  //     ll mid=(s+e)/2;
  //     lazyupdate(tree,s,mid,l,r,inc,2*index);
  //     lazyupdate(tree,mid+1,e,l,r,inc,2*index+1);

  //     tree[index]=std::min(tree[index*2],tree[2*index+1]);
  //     return;
  //   }

  //   ll lazyqueries(ll *tree,ll s,ll e,ll l,ll r,ll index)
  //   {
  //      //resolve
  //     if(lazy[index])
  //     {
  //       tree[index]+=lazy[index];

  //       if(s!=e){
  //         lazy[2*index]+=lazy[index];
  //         lazy[2*index+1]+=lazy[index];
  //       }

  //       lazy[index]=0;
  //     }

  //     //no overlap
  //     if(r<s || l>e)
  //       return ll_MAX;

  //      //complete
  //     if(s>=l && e<=r)
  //     {
  //       return tree[index];
  //     }

  //     ll mid=(s+e)/2;
  //     ll left=lazyqueries(tree,s,mid,l,r,2*index);
  //     ll right=lazyqueries(tree,mid+1,e,l,r,2*index+1);

  //     return std::min(left,right);
      
  //   }
  // }//end of segment trees

  

 int main()
  {
     // cout<<"Hi"<<endl;
    ll n,m,k;
    cin>>n>>m>>k;
    ll a[n+1];
    ll b[m+1];
    ll pre1[n+1];
    ll pre2[m+1];
    pre1[0]=0ll;
    pre2[0]=0ll;
    for (ll i = 1ll; i <=n; ++i)
    {
        cin>>a[i];
        pre1[i]=pre1[i-1]+a[i];
    }
    for (ll i = 1ll; i <=m; ++i)
    {
        cin>>b[i];
        pre2[i]=pre2[i-1]+b[i];
    }

    ll x= lower_bound(pre1,pre1+n+1,k)-pre1;
    if(pre1[x]!=k)
        x--;

    // cout<<"x is "<<x<<endl;
  
    ll ans=INT_MIN;
    ll y;
    for(ll i=0;i<=x;i++)
    {
        
        y = lower_bound(pre2,pre2+m+1,k-pre1[i])-pre2;
        // cout<<"y is "<<y<<endl;
        if(pre2[y]!=(k-pre1[i]))
            y--;
        // cout<<"y is "<<y<<endl;
        ans=std::max(ans,i+y);
       
    }

    cout<<ans<<endl;
      
  

    return 0;


      
  } 

Measured memory_bytes: 9816