import sys

input = sys.stdin.buffer.readline



import bisect

N, M, K = list(map(int, input().split()))

A = list(map(int, (input().split())))

B = list(map(int, (input().split())))

cumA, cumB = [0], [0]

for a in A:

    cumA.append(cumA[-1]+a)

for b in B:

    cumB.append(cumB[-1]+b)

ans = 0

for i in range(N, -1, -1):

    if cumA[i] > K: continue

    j = bisect.bisect_right(cumB, K-cumA[i])

    ans = max(ans, i+j-1)

print(ans)
import sys

input = sys.stdin.buffer.readline



N, M, K = list(map(int, input().split()))

A = list(map(int, (input().split())))

B = list(map(int, (input().split())))

t = sum(B)

# 尺取法

j = M   # bはmから減らしていく

ans = 0

for i in range(N+1):    # aは0からnまで増やしていく

    if i: t += A[i-1]   # i個までの累計になるように足す 0個は0

    while (j>0 and t>K):    # t<=k または j==0 で抜ける

        j -= 1

        t -= B[j]

    if t>K: break   # bが0番まで行っても　t>k の場合はだめ

    ans = max(ans, i+j)

print(ans)

import sys

input = sys.stdin.buffer.readline
import bisect

N, M, K = list(map(int, input().split()))
A = list(map(int, (input().split())))
B = list(map(int, (input().split())))
cumA, cumB = [0], [0]
for a in A:
    cumA.append(cumA[-1] + a)
for b in B:
    cumB.append(cumB[-1] + b)
ans = 0
for i in range(N, -1, -1):
    if cumA[i] > K:
        continue
    j = bisect.bisect_right(cumB, K - cumA[i])
    ans = max(ans, i + j - 1)
print(ans)

import sys

input = sys.stdin.buffer.readline
N, M, K = list(map(int, input().split()))
A = list(map(int, (input().split())))
B = list(map(int, (input().split())))
t = sum(B)
# 尺取法
j = M  # bはmから減らしていく
ans = 0
for i in range(N + 1):  # aは0からnまで増やしていく
    if i:
        t += A[i - 1]  # i個までの累計になるように足す 0個は0
    while j > 0 and t > K:  # t<=k または j==0 で抜ける
        j -= 1
        t -= B[j]
    if t > K:
        break  # bが0番まで行っても　t>k の場合はだめ
    ans = max(ans, i + j)
print(ans)

-import bisect - -cumA, cumB = [0], [0] -for a in A: -    cumA.append(cumA[-1] + a) -for b in B: -    cumB.append(cumB[-1] + b) +t = sum(B) +# 尺取法 +j = M  # bはmから減らしていく -for i in range(N, -1, -1): -    if cumA[i] > K: -        continue -    j = bisect.bisect_right(cumB, K - cumA[i]) -    ans = max(ans, i + j - 1) +for i in range(N + 1):  # aは0からnまで増やしていく +    if i: +        t += A[i - 1]  # i個までの累計になるように足す 0個は0 +    while j > 0 and t > K:  # t<=k または j==0 で抜ける +        j -= 1 +        t -= B[j] +    if t > K: +        break  # bが0番まで行っても　t>k の場合はだめ +    ans = max(ans, i + j)