#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
struct node
{
    int t,p[15],c,id;
}cut[35];
bool cmp(node x,node y)
{
    return x.t<y.t;
}
int T,longe,ans[35],tmpa[35],tmpl,n,w,m,vis[205],num;
void dfs(int pos,int lastt)
{
    if(n-pos+tmpl<=longe) return;
    int num,i,j,tmp;
    for(i=pos+1;i<=n;i++)
    {
        for(j=1,num=0;j<=cut[i].c;j++)
        {
            tmp=cut[i].p[j];
            if(vis[tmp]==0)
                num++;
            vis[tmp]++;
        }
        if((cut[i].t-lastt<=w||!tmpl)&&num>=3)
        {
            tmpl++;
            tmpa[tmpl]=cut[i].id;
            dfs(i,cut[i].t);
            tmpl--;
        }
        for(j=1;j<=cut[i].c;j++)
        {
            tmp=cut[i].p[j];
            vis[tmp]--;
        }
    }
    if(longe<tmpl)
    {
        longe=tmpl;
        for(j=0;j<longe;j++)
            ans[j]=tmpa[j+1];
    }
}
int main()
{
    int i,j;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d%d",&n,&m,&w);
        for(i=1;i<=n;i++)
        {
            scanf("%d%d",&cut[i].c,&cut[i].t);
            for(j=1;j<=cut[i].c;j++)
                scanf("%d",&cut[i].p[j]);
            cut[i].id=i;
        }
        sort(cut+1,cut+n+1,cmp);
        memset(vis,0,sizeof vis);
        longe=0;tmpl=0;
        dfs(0,cut[1].t);
        sort(ans,ans+longe);
        printf("%d\n",longe);
        for(i=0;i<longe-1;i++)
            printf("%d ",ans[i]);
        printf("%d\n",ans[longe-1]);
    }
    return 0;
}