#include <stdio.h>
    #include <stdlib.h>
int n ,m, x;
int c[12];
int a[12][12];
int A[12];
int tmp[12];
int tmptmp[12];
typedef struct {
    int c;
    int a[12];
} zz;

zz z[12];

int cmp(const void * n1, const void * n2)
{
	if (((zz*)n1)->c > ((zz *)n2)->c)
	{
		return -1;
	}
	else if (((zz *)n1)->c < ((zz *)n2)->c)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int check(){
    int i, ii;
    int q;

    
    for (i = 0; i < m; i++)
    {
        q = 0;
        for (ii = 0; ii < n; ii++)
            q += tmp[ii] * z[ii].a[i];
        if (q < x)
        {
            
            return (-1);
        }
  
    
    }
    
    return (1);
    
}
int f(int i){
    if (i == n)
        return (check());
    tmp[i] = 0;
    if (f(i + 1) == 1)
    {
        A[i] = 0;
        return (1);
    }
    tmp[i] =1;
    if (f(i + 1) == 1)
    {
        A[i] = 1;
        return (1);
    }
    return (-1);
}



int main(void){
    // Your code here!
    
    scanf("%d %d %d", &n, &m, &x);
    
    int i, j, ii,ans;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &(z[i].c));
        for (ii = 0; ii < m; ii++)
            scanf("%d", &(z[i].a[ii]));
    }
    
    
    
    
    
    qsort(z, n, sizeof(zz), cmp);
    
    
    
    if (f(0) == -1)
    {
        printf("-1");
    }
    else
    {
        ans = 0;
        for (i = 0; i < n; i++)
        {
            
            ans += A[i] * z[i].c;
        }
        printf("%d", ans);
    }
    return (0);
}
