def Binary_Search_Low_Value(A,x,equal=False,sort=False):
    """Aのx未満の要素の中で最大のものを出力する.

    A:リスト
    x:調べる要素
    sort:ソートをする必要があるかどうか(Trueで必要)
    equal:Trueのときはx"未満"がx"以下"になる
    ※全ての要素がx以上(超える)場合はNoneが返される.
    """

    if sort:
        A.sort()

    if A[0]>x or ((not equal) and A[0]==x):
        return None

    L,R=0,len(A)
    while R-L>1:
        C=L+(R-L)//2
        if A[C]<x or (equal and A[C]==x):
            L=C
        else:
            R=C

    return A[L]
#================================================
from itertools import product
def f(T):
    E=[sum(t) for t in product(*T)]
    E.sort()
    return E
#================================================
N,M,K=map(int,input().split())
X=[];Y=[]
for k in range(N):
    A=list(map(int,input().split()))
    if k%2==0:
        X.append(A)
    else:
        Y.append(A)

U=f(X);V=f(Y)
S=0
for u in U:
    if u<=K:
        v=Binary_Search_Low_Value(V,K-u,True)

        if v!=None and S<u+v:
            S=u+v

print(K-S if S>0 else -1)