#include<bits/stdc++.h>
using namespace std;
void recursive_comb(int *indexes, int s, int rest, std::function<void(int *)> f) {
  if (rest == 0) {
    f(indexes);
  } else {
    if (s < 0) return;
    recursive_comb(indexes, s - 1, rest, f);
    indexes[rest - 1] = s;
    recursive_comb(indexes, s - 1, rest - 1, f);
  }
}
 
// nCkの組み合わせに対して処理を実行する
void foreach_comb(int n, int k, std::function<void(int *)> f) {
  int indexes[k];
  recursive_comb(indexes, n - 1, k, f);
}
 
int main() {
  static int N, M, X;
  static int C[12][13], i,j,k;
  static int ca[12], Ans, te;
  
  cin >> N >> M >> X;
  for(j=0;j<N;j++)
    for(i=0;i<M+1;i++)
      cin >> C[j][i];
  
  for(i=1;i<=N;i++){
    Ans=0;
    foreach_comb(N, i, [](int *indexes) {
      for(j=0;j<M;j++){
        ca[j]=0;
        for(k=0;k<i;k++)
          ca[j]+=C[indexes[k]][j+1];
      }
      int p=0;
      for(j=0;j<M;j++)
        p+=(ca[j]>=X);
      if(p==M){
        for(te=j=0;j<i;j++)
          te+=C[indexes[j]][0];
        Ans = (Ans==0)?te:(Ans>te)?te:Ans;
      }
    });
    if(Ans){
      cout << Ans;
      return 0;
    }
  }
  cout << -1;
}