import std.stdio, std.conv, std.string, std.algorithm,
       std.math, std.array, std.container, std.typecons;

int n, m;
int x;
int[] c;
int[][] a;

int check(int flag) {
  int[] res = new int[m];
  int cost = 0;
  for(int i=0; i<n; i++) {
    if(((1<<i)&flag) > 0) {
      for(int j=0; j<m; j++) res[j] += a[i][j];
      cost += c[i];
    }
  }
  foreach(ri;res) if(ri<x) return int.max;
  return cost;
}

void main() {
  readf("%d %d %d\n", &n, &m, &x);
  c = new int[n];
  a = new int[][n];
  for(int i=0; i<n; i++) {
    readf("%d ", &c[i]);
    a[i] = readln.chomp.split.to!(int[]);
  }
  int mini = int.max;
  for(int flag=0; flag<(1<<n); flag++) {
    mini = min(mini, check(flag));
  }
  if(mini<int.max) writeln(mini);
  else writeln(-1);
}
