#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
 
 
void swap (int *x, int *y) {
  int temp;    
 
  temp = *x;
  *x = *y;
  *y = temp;
}
 
int gcd(int a,int b){
  if(a<b){
    swap(&a,&b);
  }
 
  if(b==0){
    return a;
  }
 
  int r=a%b;
  while(r!=0){
    a = b;
    b = r;
    r = (a%b);
  }
 
  return b;
}
 
/* クイックソート */
int dn(const void*a,const void*b){return*(int*)b-*(int*)a;}
 
 
int modpow(int a,int n,int mod){
  int ans=1;
  while(n>0){
    if(n & 1){
      ans=ans*a%mod;
    }
    a=a*a%mod;
    n/=2;
  }
  return ans;
}
 
int max(int a,int b){
  if(a<b){
    return b;
  }
  else{
    return a;
  }
}
 
int min(int a,int b){
  if(a<b){
    return a;
  }
  else{
    return b;
  }
}
 
void chmax(int *a,int b){
  if(*a < b){
    *a = b;
  }
 
  return;
}
 
void chmin(int *a,int b){
  if(*a > b){
    *a =b;
  }
 
  return;
}
 
 
/****************************************\
| Thank you for viewing my code:)        |
| Written by RedSpica a.k.a. RanseMirage |
| Twitter:@asakaakasaka                  | 
\****************************************/
 
int main(void){
  int n,m,x;
  scanf("%d%d%d",&n,&m,&x);

  int C[n];
  int A[n][m];
  for(int i=0;i<n;i++){
    scanf("%d",C[i]);
    for(int j=0;j<m;j++){
      scanf("%d",&A[i][j]);
    }
  }
  int B[m];
  for(int i=0; i<m; i++){
    B[i]=0;
  }
  int count=0;
  for(int bit=0; bit<(1<<n); bit++){
    for(int i=0; i<n; i++){
      if(bit & (1<<i)){
        B[i]+=A[i][bit];
        count=C[i];
      }
    }
  }
  int ans=0;
  for(int i=0; i<m; i++){
    if(B[i] >= x){
      ans++;
    }
  }
  if(ans==m){
    printf("%d\n", count);
  }else{
    printf("-1\n");
  }

  //write your code!

  return 0;
}