#include<stdio.h>

int main (void){

    int N,M,flag,minNo;
    long long v_efiMax,n_efiMax;
    long long A[13][13];
    long long X,money,min,yoyu;
    int ibook,jalgo;
    char c;

    scanf("%d %d %lld",&N,&M,&X);
    scanf("%c",&c);

    for(ibook=0;ibook<N;ibook++){
        for(jalgo=0;jalgo<M+1;jalgo++){
            scanf("%lld",&A[ibook][jalgo]);
            scanf("%c",&c);
        }


    }

    //可能性判定
    for(jalgo=0;jalgo<=M;jalgo++){
        A[N][jalgo]=0;
        flag=0;

        for(ibook=0;ibook<N;ibook++){
            A[N][jalgo]+=A[ibook][jalgo];
        }

        if(jalgo==0){
            continue;//合計金額出したかった

        }else if(A[N][jalgo]<X){
            flag=-1;
            break;
        }

        if(jalgo==1){
            min=A[N][jalgo];
            minNo=1;
        }else if(A[N][jalgo]<min){
            min=A[N][jalgo];
            minNo=jalgo;
        }
    }//for end

    if(flag==-1){
        printf("-1");
        return 0;
    }


    money=A[N][0];
    //printf(" max money:%lld\n",money);

    yoyu=min-X;
    //printf("yoyu %d\n",yoyu);

    if(yoyu==0){
        printf("%lld",money);
        return 0;
    }

    //合っているはず

    //最小金額導出

    flag=0;
    while(yoyu>0&&money>0){
        flag=-1;

        for(ibook=0;ibook<N;ibook++){
            if(A[ibook][minNo]<=yoyu){
                if(flag==-1){
                    flag=0;
                    v_efiMax=A[ibook][0]/A[ibook][minNo];
                    n_efiMax=ibook;
                    continue;

                }else if(A[ibook][0]/A[ibook][minNo]>v_efiMax){
                    v_efiMax=A[ibook][0]/A[ibook][minNo];
                    n_efiMax=ibook;
                }
            }
        }
        if(flag!=0){
            break;
        }

        yoyu-=A[n_efiMax][minNo];
        money-=A[n_efiMax][0];

        //printf("delete %lld yen\n",A[n_efiMax][0]);
        //printf("money:%lld\n",money);
        //printf("yoyu %d\n",yoyu);
        A[n_efiMax][0]=0;
    }//while end





    printf("%lld",money);
    return 0;
}