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



import sys

sys.setrecursionlimit(10**6)

readline = sys.stdin.readline

ca = [[int(i) for i in readline().split()] for _ in range(n)]



from itertools import combinations

import numpy as np



lc = [i for i in range(n)]



ans = 1001001001



for nc in range(1,n+1):

    lc_sub = list(combinations(lc,nc))

    for lc_sub2 in lc_sub:

        tmp_price = 0

        tmp_und = np.array([0]*m)

        for c in lc_sub2:

            tmp_price += ca[c][0]

            tmp_und += np.array(ca[c][1:])

        if all([und >= x for und in tmp_und]):

            ans = min(ans, tmp_price)



if ans == 1001001001:

    print((-1))

else:

    print(ans)
n, m, x = list(map(int, input().split()))

ca = [list(map(int, input().split())) for _ in range(n)]



from itertools import product

import numpy as np



INF = 1001001001

ans = INF



for i in product(list(range(2)), repeat=n): # product(range(2),n)でn桁のbit全探索が可能

    tmp_price = 0

    tmp_und = np.zeros((m, ))

    for j in range(n):

        if i[j]:

            c, *a = ca[j]

            # Pythonでは、タプルやリストの要素を展開して複数の変数に代入できる。アンパック代入などと呼ばれる

            # 変数の数が要素の数よりも少ない場合、変数名にアスタリスク*をつけると、要素がリストとしてまとめて代入される

            tmp_price += c

            tmp_und += np.array(a, dtype=np.int64)

    tmp_und = tmp_und.tolist()

    if all(tmp_und_ele >= x for tmp_und_ele in tmp_und):

        ans = min(ans, tmp_price)



print((ans if ans != INF else -1))
n, m, x = list(map(int, input().split()))
import sys

sys.setrecursionlimit(10**6)
readline = sys.stdin.readline
ca = [[int(i) for i in readline().split()] for _ in range(n)]
from itertools import combinations
import numpy as np

lc = [i for i in range(n)]
ans = 1001001001
for nc in range(1, n + 1):
    lc_sub = list(combinations(lc, nc))
    for lc_sub2 in lc_sub:
        tmp_price = 0
        tmp_und = np.array([0] * m)
        for c in lc_sub2:
            tmp_price += ca[c][0]
            tmp_und += np.array(ca[c][1:])
        if all([und >= x for und in tmp_und]):
            ans = min(ans, tmp_price)
if ans == 1001001001:
    print((-1))
else:
    print(ans)

n, m, x = list(map(int, input().split()))
ca = [list(map(int, input().split())) for _ in range(n)]
from itertools import product
import numpy as np

INF = 1001001001
ans = INF
for i in product(list(range(2)), repeat=n):  # product(range(2),n)でn桁のbit全探索が可能
    tmp_price = 0
    tmp_und = np.zeros((m,))
    for j in range(n):
        if i[j]:
            c, *a = ca[j]
            # Pythonでは、タプルやリストの要素を展開して複数の変数に代入できる。アンパック代入などと呼ばれる
            # 変数の数が要素の数よりも少ない場合、変数名にアスタリスク*をつけると、要素がリストとしてまとめて代入される
            tmp_price += c
            tmp_und += np.array(a, dtype=np.int64)
    tmp_und = tmp_und.tolist()
    if all(tmp_und_ele >= x for tmp_und_ele in tmp_und):
        ans = min(ans, tmp_price)
print((ans if ans != INF else -1))

-import sys - -sys.setrecursionlimit(10**6) -readline = sys.stdin.readline -ca = [[int(i) for i in readline().split()] for _ in range(n)] -from itertools import combinations +ca = [list(map(int, input().split())) for _ in range(n)] +from itertools import product -lc = [i for i in range(n)] -ans = 1001001001 -for nc in range(1, n + 1): -    lc_sub = list(combinations(lc, nc)) -    for lc_sub2 in lc_sub: -        tmp_price = 0 -        tmp_und = np.array([0] * m) -        for c in lc_sub2: -            tmp_price += ca[c][0] -            tmp_und += np.array(ca[c][1:]) -        if all([und >= x for und in tmp_und]): -            ans = min(ans, tmp_price) -if ans == 1001001001: -    print((-1)) -else: -    print(ans) +INF = 1001001001 +ans = INF +for i in product(list(range(2)), repeat=n):  # product(range(2),n)でn桁のbit全探索が可能 +    tmp_price = 0 +    tmp_und = np.zeros((m,)) +    for j in range(n): +        if i[j]: +            c, *a = ca[j] +            # Pythonでは、タプルやリストの要素を展開して複数の変数に代入できる。アンパック代入などと呼ばれる +            # 変数の数が要素の数よりも少ない場合、変数名にアスタリスク*をつけると、要素がリストとしてまとめて代入される +            tmp_price += c +            tmp_und += np.array(a, dtype=np.int64) +    tmp_und = tmp_und.tolist() +    if all(tmp_und_ele >= x for tmp_und_ele in tmp_und): +        ans = min(ans, tmp_price) +print((ans if ans != INF else -1))