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: kati_ok = list()
  
  
  def katihantei(kati, ind, M, X, i):
      global kati_ok
      # print(ind)
      f = 0
      if ind == M:
          return i
      if kati[ind] < X:
          f = 1
      if f == 1:
          return
      ind += 1
      return katihantei(kati, ind, M, X, i)
  
  
  def main():
      N, M, X = map(int, input().split())
      diction = list()
      for i in range(N):
          list_i = [i]
          list_i.extend(list(map(int, input().split())))
          diction.append(list_i)
      # print(diction)
  
      n = len(diction)
      bit_list = list()
      for i in range(2**n):
          bit = []
          for j in range(n):  # このループが一番のポイント
              if (i >> j) & 1:  # 順に右にシフトさせ最下位bitのチェックを行う
                  bit.append(diction[j][0])  # フラグが立っていたら bag に果物を詰める
          # print(bit)
          bit_list.append(bit)
      # print(bit_list)
      katiari = list()
      sum_kingaku = list()
      for i in range(len(bit_list)):
          kingaku = 0
          kati = [0] * M
          for j in range(len(bit_list[i])):
              kingaku += diction[bit_list[i][j]][1]
              for k in range(M):
                  kati[k] += diction[bit_list[i][j]][2 + k]
          sum_kingaku.append(kingaku)
  
          sorenokati = katihantei(kati, 0, M, X, i)
          if sorenokati != None:
              katiari.append(sorenokati)
      # print(katiari,sum_kingaku)
      if len(katiari) == 0:
          print(-1)
      else:
          min_kingaku = 10**5
          for i in range(len(katiari)):
              if min_kingaku > sum_kingaku[katiari[i]]:
                  min_kingaku = sum_kingaku[katiari[i]]
          print(min_kingaku)
  
  
  if __name__ == "__main__":
      main()
  
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"}]