output_description: If the objective is not achievable, print `-1`; otherwise, print the minimum
  amount of money needed to achieve it.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M X
      C_1 A_{1,1} A_{1,2} \cdots A_{1,M}
      C_2 A_{2,1} A_{2,2} \cdots A_{2,M}
      \vdots
      C_N A_{N,1} A_{N,2} \cdots A_{N,M}
attempt: from itertools import combinations as co
  
  n, m, x = map(int, input().split())
  A = []
  ansl = []
  for i in range(n):
      A.append(list(map(int, input().split())))
  for i in range(n):
      for j in range(1, m + 1):
          if A[i][j] < x:
              break
          if j == m:
              ansl.append(A[i][0])
  
  if n == 1:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for i, j in co(range(n), 2):
      for k in range(1, m + 1):
          if A[i][k] + A[j][k] < x:
              break
          if k == m:
              ansl.append(A[i][0] + A[j][0])
  if n == 2:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for i, j, k in co(range(n), 3):
      for l in range(1, m + 1):
          if A[i][l] + A[j][l] + A[k][l] < x:
              break
          if l == m:
              ansl.append(A[i][0] + A[j][0] + A[k][0])
  if n == 3:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for h, i, j, k in co(range(n), 4):
      for l in range(1, m + 1):
          if A[h][l] + A[i][l] + A[j][l] + A[k][l] < x:
              break
          if l == m:
              ansl.append(A[h][0] + A[i][0] + A[j][0] + A[k][0])
  if n == 4:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for g, h, i, j, k in co(range(n), 5):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [g, h, i, j, k]]))
  if n == 5:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for f, g, h, i, j, k in co(range(n), 6):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [f, g, h, i, j, k]]))
  if n == 6:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for e, f, g, h, i, j, k in co(range(n), 7):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [e, f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [e, f, g, h, i, j, k]]))
  if n == 7:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for d, e, f, g, h, i, j, k in co(range(n), 8):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [d, e, f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [d, e, f, g, h, i, j, k]]))
  if n == 8:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for c, d, e, f, g, h, i, j, k in co(range(n), 9):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [c, d, e, f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [c, d, e, f, g, h, i, j, k]]))
  if n == 9:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for b, c, d, e, f, g, h, i, j, k in co(range(n), 10):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [b, c, d, e, f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [b, c, d, e, f, g, h, i, j, k]]))
  if n == 10:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for a, b, c, d, e, f, g, h, i, j, k in co(range(n), 11):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [a, b, c, d, e, f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(sum([A[alp][0] for alp in [a, b, c, d, e, f, g, h, i, j, k]]))
  if n == 11:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  for a0, a, b, c, d, e, f, g, h, i, j, k in co(range(n), 12):
      for l in range(1, m + 1):
          if sum([A[alp][l] for alp in [a0, a, b, c, d, e, f, g, h, i, j, k]]) < x:
              break
          if l == m:
              ansl.append(
                  sum([A[alp][0] for alp in [a0, a, b, c, d, e, f, g, h, i, j, k]])
              )
  if n == 12:
      print(min(ansl) if len(ansl) > 0 else "-1")
      quit()
  
problem_description: Takahashi, who is a novice in competitive programming, wants to learn M
  algorithms. Initially, his _understanding level_ of each of the M algorithms
  is 0.
  
  Takahashi is visiting a bookstore, where he finds N books on algorithms. The
  i-th book (1\leq i\leq N) is sold for C_i yen (the currency of Japan). If he
  buys and reads it, his understanding level of the j-th algorithm will increase
  by A_{i,j} for each j (1\leq j\leq M). There is no other way to increase the
  understanding levels of the algorithms.
  
  Takahashi's objective is to make his understanding levels of all the M
  algorithms X or higher. Determine whether this objective is achievable. If it
  is achievable, find the minimum amount of money needed to achieve it.
samples: [{"input": "3 3 10\n    60 2 2 4\n    70 8 7 9\n    50 2 3 9", "output": "120\n    \n\nBuying the second and third books makes his understanding levels of all the\nalgorithms 10 or higher, at the minimum cost possible.\n\n* * *"}, {"input": "3 3 10\n    100 3 1 4\n    100 1 5 9\n    100 2 6 5", "output": "-1\n    \n\nBuying all the books is still not enough to make his understanding levels of\nall the algorithms 10 or higher.\n\n* * *"}, {"input": "8 5 22\n    100 3 7 5 3 1\n    164 4 5 2 7 8\n    334 7 2 7 2 9\n    234 4 7 2 8 2\n    541 5 4 3 3 6\n    235 4 8 6 9 7\n    394 3 6 1 6 2\n    872 8 4 3 7 2", "output": "1067"}]