// Author : Naresh Bharasagar
// Instt. : Indian Institute of Technology Guwahati

//--------------------------------------------------------------------------------------------------------------------------------

#include<bits/stdc++.h>
using namespace std;
typedef long long int loo;
typedef long double ld;


#define loop(i,begin,end) for(__typeof(end)i=(begin)-((begin)>(end));i!=(end)-((begin)>(end));i+=1-2*((begin)>(end)))
#define loopset(it,val,dtype) for(set<dtype>::iterator it=val.begin(); it!=val.end(); it++)
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define v(name,type,size) vector<type> name(size)
#define vloo vector<loo>
#define fillz(a) memset(a,0,sizeof(a))
#define outa(a,n) loop(i,0,n) cout << a[i] << " ";
#define pr(a) cout << a << "\n";
#define mod(a) a%1000000007
#define pb(l) push_back(l)
#define ppb pop_back()
#define ff first
#define ss second
#define input(a) for(auto &i: a) cin >> i;
#define prnt(v) for(auto it: v) cout << *it << " ";
#define deb0(i) cout << "[" << #i << "=" << i << "]\n";
#define mt make_tuple
#define mp make_pair
#define nl cout << "\n";
#define eb emplace_back
#define INF 1000000000
#define M 1000000007

loo power(loo x, loo y, loo p) { 
    loo res = 1;
    x = x % p;
    while (y > 0) { 
        if (y & 1) res = (res*x) % p; 
        y = y>>1;
        x = (x*x) % p;   
    } 
    return res; 
}

loo power(loo x, loo y) { 
    loo temp; 
    if( y == 0) 
        return 1; 
    temp = power(x, y/2); 
    if (y%2 == 0) 
        return temp*temp; 
    else
        return x*temp*temp; 
}

bool sortbysec(const pair<loo,loo> &a, const pair<loo,loo> &b) { 
    return (a.second > b.second); 
}

string decToBin(loo n)
{
	string s = "0";
	if(n == 0) return s;
	s = "";
    while (n > 0)
    { 
        s += (n % 2) + '0';
        n = n / 2;
    }
    reverse(s.begin(), s.end());
    return s;
}
 
loo binToDec(string s)
{
    loo ans = 0;
    reverse(s.begin(), s.end());
    loop(i, 0, s.size())
    {
    	ans += pow(2, i)*(s[i] - '0');
    }
    return ans;
}

loo andOperator(loo a, loo b){ 
    string sa = decToBin(a);
    string sb = decToBin(b);
    loo sza=sa.size(), szb=sb.size();
    if(sza>szb) {
        loop(i,0,sza-szb) sb = "0"+sb;
    }
    else if(szb>sza) {
        loop(i,0,szb-sza) sa = "0"+sa;
    }
    string res = "";
    loop(i,0,sa.size()) {
        if(sa[i]=='1' && sb[i]=='1') res+="1";
        else res+="0";
    }
    return binToDec(res);
}

loo orOperator(loo a,loo b) {
    string sa = decToBin(a);
    string sb = decToBin(b);
    loo sza=sa.size(), szb=sb.size();
    if(sza>szb) {
        loop(i,0,sza-szb) sb = "0"+sb;
    }
    else if(szb>sza) {
        loop(i,0,szb-sza) sa = "0"+sa;
    }
    string res = "";
    loop(i,0,sa.size()) {
        if(sa[i]=='0' && sb[i]=='0') res+="0";
        else res+="1";
    }
    return binToDec(res);
}

loo nCr(loo n, loo r) {
    loo p = 1, k = 1; 
    if (n - r < r) 
        r = n - r; 
  
    if (r != 0) { 
        while (r) { 
            p *= n; 
            k *= r; 
            loo m = __gcd(p, k); 
            p /= m; 
            k /= m; 
            n--; 
            r--; 
        }
    } 
  
    else p = 1; 
    return p; 
}

// vector<int> dist;
void dfs(vector<int> adj[], int src, vector<int>& v) {
    v[src]=1;
    loop(i,0,adj[src].size()) {
        int x = adj[src][i];
        if(v[x]==0) {
            v[x]=1;
            // dist[x] = dist[src]+1;
            dfs(adj,x,v);
        }
    }
}

// ----------------------------------------------------------------

bool check(vloo a, loo x) {
    loop(i,0,a.size()) if(a[i]<x) return false;
    return true;
}

int main() {
	fast_io

    // freopen("filename.in","r",stdin);
    // freopen("filename.out","w",stdout);

    loo n,m,x;
    cin >> n >> m >> x;
    vloo c(n);
    vector<vloo> a(n,vloo(m));
    loop(i,0,n) {
        cin >> c[i];
        loop(j,0,m) cin >> a[i][j];
    }
    loo mask = 1<<n;
    loo mn = INF;
    loop(i,0,mask) {
        vloo skill(m,0);
        loo res = 0;
        loop(j,0,n) {
            if((i>>j)&1) {
                res+=c[j];
                loop(k,0,m) skill[k]+=a[j][k];
            }
        }
        if(check(skill,x)) mn=min(mn,res);
    }
    if(mn==INF) cout << -1;
    else cout << mn;
    nl;

    return 0;
}

Measured memory_bytes: 3644