import std;

alias sread = () => readln.chomp();
alias lread = () => readln.chomp.to!long();
alias aryread(T = long) = () => readln.split.to!(T[]);
//aryread!string();
//auto PS = new Tuple!(long,string)[](M);
//x[]=1;でlong[]全要素1に初期化
void main()
{
    long n, m, x;
    scan(n, m, x);
    auto tmp = new long[][](n);
    // writeln(tmp);
    foreach (i; 0 .. n)
    {
        tmp[i] = aryread();
    }
    // writeln(tmp);

    long func(long[] a)
    {
        long sum_x;
        auto skil = new long[](m);
        if (a.length == n)
        {
            foreach (i; 0 .. (a.length))
            {
                if (a[i] == 1)
                {

                    sum_x += tmp[i][0];
                    foreach (j; 0 .. m)
                    {
                        skil[j] += tmp[i][j];
                    }
                }
            }
            foreach (i; 0 .. m)
            {
                if (skil[i] >= x)
                {
                    continue;
                }
                else
                {
                    return -1;
                }
            }
            return sum_x;
        }
        else
        {
            // func(a~0);
            // func(a~1);
            if ((func(a ~ 0) != -1) && (func(a ~ 1) != -1))
            {
                return min(func(a ~ 0), func(a ~ 1));
            }
            else if (func(a ~ 0) == -1)
            {
                return func(a ~ 1);
            }
            else if (func(a ~ 1) == -1)
            {
                return func(a ~ 0);
            }
            else
            {
                return -1;
            }

        }
    }

    func([1, 1]).writeln();
    // func([1,1,0])
    // func([1,1,1])
    // long func(long[] a);
    // func([]);
    // func([1]);
    // func([0]);
    // func([1,0]);
    // func([1,1]);

    // xxx  func(xxx) = min(func(1xx), func(0xx))
    // 1xx

    // 11x
    // 111
    // 110

    // 10x
    // 101
    // 100

    // writeln(func(tmp, x));

}

void scan(L...)(ref L A)
{
    auto l = readln.split;
    foreach (i, T; L)
    {
        A[i] = l[i].to!T;
    }
}

void arywrite(T)(T a)
{
    a.map!text.join(' ').writeln;
}
