from itertools import accumulate



n, m, k = list(map(int, input().split()))

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

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



a_acc = [0] + list(accumulate(a))

b_acc = [0] + list((accumulate(b)))



ans = 0

bn = m



for an in range(n + 1):

    rem = k - a_acc[an]

    if rem < 0:

        break



    # rem >= 0 かつ、b_acc[0] = 0なので、bnはどんなに減っても0で必ず止まります。マイナスになってバグることはありません

    while b_acc[bn] > rem:

        bn -= 1

    ans = max(ans, an + bn)



print(ans)
from itertools import accumulate



n, m, k = list(map(int, input().split()))

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

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



a_acc = [0] + list(accumulate(a))  # aを0冊読む=1冊も読まない場合があるので

b_acc = [0] + list(accumulate(b))  # 今度は[0]が必要です



ans = 0

for an in range(n + 1):

    rem = k - a_acc[an]

    if rem < 0:

        break



    # 最初は 0 <= x < m + 1 の範囲で、この範囲を狭めていきます

    ok = 0

    ng = m + 1   

    # ng = ok + 1のとき、ok <= x < ng は ok <= x < ok + 1で、x = okに確定します

    while abs(ng - ok) > 1:

        mid = (ok + ng) // 2

        # bをmid冊読めるか？

        if b_acc[mid] <= rem:

        # 読めるならok

            ok = mid

        else:

        # 読めないならng

            ng = mid



    bn = ok

    ans = max(ans, an + bn)



print(ans)
from itertools import accumulate

n, m, k = list(map(int, input().split()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a_acc = [0] + list(accumulate(a))
b_acc = [0] + list((accumulate(b)))
ans = 0
bn = m
for an in range(n + 1):
    rem = k - a_acc[an]
    if rem < 0:
        break
    # rem >= 0 かつ、b_acc[0] = 0なので、bnはどんなに減っても0で必ず止まります。マイナスになってバグることはありません
    while b_acc[bn] > rem:
        bn -= 1
    ans = max(ans, an + bn)
print(ans)

from itertools import accumulate

n, m, k = list(map(int, input().split()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a_acc = [0] + list(accumulate(a))  # aを0冊読む=1冊も読まない場合があるので
b_acc = [0] + list(accumulate(b))  # 今度は[0]が必要です
ans = 0
for an in range(n + 1):
    rem = k - a_acc[an]
    if rem < 0:
        break
    # 最初は 0 <= x < m + 1 の範囲で、この範囲を狭めていきます
    ok = 0
    ng = m + 1
    # ng = ok + 1のとき、ok <= x < ng は ok <= x < ok + 1で、x = okに確定します
    while abs(ng - ok) > 1:
        mid = (ok + ng) // 2
        # bをmid冊読めるか？
        if b_acc[mid] <= rem:
            # 読めるならok
            ok = mid
        else:
            # 読めないならng
            ng = mid
    bn = ok
    ans = max(ans, an + bn)
print(ans)

-a_acc = [0] + list(accumulate(a)) -b_acc = [0] + list((accumulate(b))) +a_acc = [0] + list(accumulate(a))  # aを0冊読む=1冊も読まない場合があるので +b_acc = [0] + list(accumulate(b))  # 今度は[0]が必要です -bn = m -    # rem >= 0 かつ、b_acc[0] = 0なので、bnはどんなに減っても0で必ず止まります。マイナスになってバグることはありません -    while b_acc[bn] > rem: -        bn -= 1 +    # 最初は 0 <= x < m + 1 の範囲で、この範囲を狭めていきます +    ok = 0 +    ng = m + 1 +    # ng = ok + 1のとき、ok <= x < ng は ok <= x < ok + 1で、x = okに確定します +    while abs(ng - ok) > 1: +        mid = (ok + ng) // 2 +        # bをmid冊読めるか？ +        if b_acc[mid] <= rem: +            # 読めるならok +            ok = mid +        else: +            # 読めないならng +            ng = mid +    bn = ok