using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
class Program
{
    static void Main(string[] args)
    {
            // 入力
            string[] sS = System.Console.ReadLine().Trim().Split(' ');
            int iN = int.Parse(sS[0]);
            int iM = int.Parse(sS[1]);
            int iX = int.Parse(sS[2]);
            List<ClsBok> lstBok = new List<ClsBok>();
            for (int i = 0; i < iN; i++)                                                    // 冊
            {
                sS = System.Console.ReadLine().Trim().Split(' ');
                ClsBok oneUsr = new ClsBok();
                oneUsr.iN = i;
                oneUsr.iC = int.Parse(sS[0]);
                for (int j = 1; j < sS.Length; j++) { oneUsr.lstR.Add(int.Parse(sS[j])); }
                lstBok.Add(oneUsr);
            }

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

            // 解析
            List<int> lstRet = new List<int>();                                                 // 各組み合わせ時の金額
            int iCnt = iN;                                                                      // 元数
            int[] nums = new int[iCnt];
            for (int i = 0; i < iCnt; i++) { nums[i] = i; }
            for (int i = iCnt; i > 0; i--)                                                      // 取得する数 iCnt個から少なくして1まで
            {
                var combinations = Combination.Enumerate(nums, i, withRepetition: false);       // 配列内の考えられる組み合わせ
                foreach (var elem in combinations)
                {
                    int iC = 0;
                    List<int> lstTrn = new List<int>() { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; // 各修練度
                    for (int j = 0; j < elem.Length; j++)
                    {
                        iC += lstBok[elem[j]].iC;                                               // ある組み合わせ時の価格の合計
                        for (int k = 0; k < lstBok[elem[j]].lstR.Count; k++)
                        {
                            lstTrn[k] += lstBok[elem[j]].lstR[k];                               // ある組み合わせ時の修練の合計
                        }
                    }
                    Boolean bOK = true;
                    for (int k = 0; k < iM; k++)
                    {
                        if (lstTrn[k] < iX)
                        {
                            bOK = false;
                            break;
                        }
                    }
                    if (bOK)
                    {
                        lstRet.Add(iC);                                                         // 各Mでの修練度が全てX以上であれば保持
                    }
                }
            }
            if (lstRet.Count == 0) { lstRet.Add(-1); }
            else { lstRet.Sort(); }

            // 出力
            System.Console.WriteLine("{0}", lstRet[0].ToString().Trim());

            sw.Stop();
#if DEBUG
            Console.WriteLine();
            Console.WriteLine("{0}", sw.Elapsed.ToString());
            Console.WriteLine("続行するには何かキーを押してください．．．");
            Console.ReadKey();
#endif
    }

        // N個からK個取得する組み合わせ(但しNが大きいと時間が掛かる)
        private static class Combination
        {
            public static IEnumerable<T[]> Enumerate<T>(IEnumerable<T> items, int k, bool withRepetition)
            {
                if (k == 1)
                {
                    foreach (var item in items)
                        yield return new T[] { item };
                    yield break;
                }
                foreach (var item in items)
                {
                    var leftside = new T[] { item };

                    // item よりも前のものを除く （順列と組み合わせの違い)
                    // 重複を許さないので、unusedから item そのものも取り除く
                    var unused = withRepetition ? items : items.SkipWhile(e => !e.Equals(item)).Skip(1).ToList();

                    foreach (var rightside in Enumerate(unused, k - 1, withRepetition))
                    {
                        yield return leftside.Concat(rightside).ToArray();
                    }
                }
            }
        }

        private class ClsBok
        {
            public int iN { get; set; } = -1;                           // No
            public int iC { get; set; } = 0;                            // 価格
            public List<int> lstR { get; set; } = new List<int>();      // 理解上昇度K
        }

}


Measured memory_bytes: 41448