      MODULE bSearchMod
! 二分探索
! 昇順の配列のみ対応。
      IMPLICIT NONE
      
      integer, parameter, private :: p = 8
      
      contains
! key以上の値が現れる最初のインデックスposを返す。
! O( log2(n) )
! 配列arrayはインデックスが1スタートで昇順の状態にしておいてほしい。
! key値がarrayの最大値より大きい場合、配列サイズ+1が返される。
! ex)
! [2, 2, 4, 4, 5]; key = -1
!  pos = 1
!
! [2, 2, 4, 4, 5]; key = 3
!        pos = 3
!
! [2, 2, 4, 4, 5]; key = 100
!                 pos = 6
      function lowerBound( array,key ) result( pos )
        implicit none
        integer(p),intent(in) :: array(1:),key
        integer(p) :: pos
        integer(p) :: left,right,mid
        logical :: isOK
        
        left = 0
        right = size( array )+1
        
        do while( abs(right-left)>1 )
          mid = (left+right)/2 !オーバーフローは考えないよ
          
          isOK = key<=array(mid)
          if( isOK )then
            right = mid
          else
            left = mid
          end if
        end do
        
        pos = right
      end function lowerBound
      
      END MODULE bSearchMod
      
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      PROGRAM tsundoku
      use bSearchMod
      IMPLICIT NONE
      INTEGER,PARAMETER :: p = 8
      integer(p) :: n,m,k,ans=0,time
      integer(p), allocatable :: a(:),b(:)
      integer(p) :: i,numB
      
      read*,n,m,k
      allocate( a(0:n),b(m) )
      read*,a(1:n)
      read*,b
      a(0) = 0
      
      do i = 1,n
          a(i) = a(i-1) + a(i)
      end do
      if( m>=2 )then
        do i = 2,m
          b(i) = b(i-1) + b(i)
        end do
      end if
      
      
      do i = 0,n
        time = k-a(i)
        if( time<0 ) cycle
        
        numB = lowerBound(b,time+1)
        if( b(numB)/=time ) numB = numB - 1
        ans = max( ans,i+numB )
      end do
      
      print*,ans
      
      stop
      !debugg
      
      
      
      END PROGRAM