#include <cstdio>


//vectorul elev[23] reprezinta stiva, apar[23] reprezinta aparitiile disciplinelor in cadrul unei combinari
//matricea stie[23][10] ia valoarea 1 daca elevul i stie disciplina j si 0 altfel
int n,k,d,elev[100],stie[100][100],apar[100],i,j,y[100];

inline int bun()
{
    int i,j;
    for (int h = 1; h <= 11; ++h) apar[j] = 0;
    for (i=1;i<=k;i++)
        for (j=1;j<=d;j++)
            if (stie[elev[i]][j]) apar[j]++;

    for (i=1;i<=d;i++)
    {
        if (!apar[i])
        {
            //for (j=i;j<=d;j++) apar[j]=0; //reinitializez pentru combinarea urmatoare
            return 0;
        }
        apar[i]=0;
    }
    return 1;
}

void back(int x)
{
    if (k==x)
    {
        if (bun())
        {
            for (int i=1;i<=k;i++) printf("%d ",elev[i]);
            printf("\n");
        }
    }
    else
        for (int i=elev[x]+1;i<=n;i++)
        {
            elev[x+1]=i;
            back(x+1);
        }
}
int main()
{
    freopen("pluricex.in", "r", stdin);
    freopen("pluricex.out", "w", stdout);
    int nr, x;
    scanf("%d %d %d", &n, &k, &d);

    for (i = 1; i <= n; ++i)
    {
        scanf("%d", &y[i]);
        for (j = 1; j <= y[i]; ++j)
            scanf("%d", &x), stie[i][x] = 1;
    }
    back(0);
    return 0;
}
