#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <sstream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int n,d,s;
int BusStartAtStop[51];
int BusRunAtRoad[51];
int gr[31][31];
bool visit[51][51];
vector<int> vRoadstops[21];
vector<int> vBusRunAtRoad[21];
void init()
{
for(int i=0;i<51;i++)
{
BusStartAtStop[i]=0;
BusRunAtRoad[i]=0;
}
for(int i=0;i<31;i++)
for(int j=0;j<31;j++)
gr[i][j]=0;
for(int i=0;i<21;i++)
{
vRoadstops[i].clear();
vBusRunAtRoad[i].clear();
}
}
void floydwarshall()
{
for(int k=1;k<=d;k++)
{
for(int i=1;i<=d;i++)
{
for(int j=1;j<=d;j++)
{
gr[i][j] = gr[i][j] | (gr[i][k] & gr[k][j]);
}
}
}
}
bool bfs(int bus1,int bus2)
{
int stop1,stop2;
int nxtStop1,nxtStop2;
int root1=BusRunAtRoad[bus1],root2=BusRunAtRoad[bus2];
queue<int> q;
memset(visit,false,sizeof(visit));
q.push(BusStartAtStop[bus1]);
q.push(BusStartAtStop[bus2]);
visit[BusStartAtStop[bus1]][BusStartAtStop[bus2]]=1;
while(!q.empty())
{
stop1 = q.front();q.pop();
stop2 = q.front();q.pop();
if(stop1==stop2)
return 1;
for(int i=0;i<vRoadstops[root1].size();i++)
{
if(vRoadstops[root1][i]==stop1)
{
nxtStop1 = vRoadstops[root1][(i+1)%vRoadstops[root1].size()];
break;
}
}
for(int i=0;i<vRoadstops[root2].size();i++)
{
if(vRoadstops[root2][i]==stop2)
{
nxtStop2 = vRoadstops[root2][(i+1)%vRoadstops[root2].size()];
break;
}
}
if(!visit[nxtStop1][nxtStop2])
{
visit[nxtStop1][nxtStop2]=1;
q.push(nxtStop1);
q.push(nxtStop2);
}
}
return 0;
}
int main()
{
string st;
int a,b;
bool f;
int val,start,bus,ret;
stringstream ss;
while(getline(cin,st))
{
ss.clear();
ss<<st;
ss>>n;
ss>>d;
ss>>s;
if(n+d+s==0)
break;
init();
for(int i=1;i<=n;i++)
{
ss.clear();
getline(cin,st);
ss<<st;
while(ss>>val)
{
vRoadstops[i].push_back(val);
}
ss.clear();
getline(cin,st);
ss<<st;
while(ss>>start>>bus)
{
BusStartAtStop[bus]=start;
BusRunAtRoad[bus]=i;
vBusRunAtRoad[i].push_back(bus);
}
}
for(int i=1;i<=d;i++)
{
for(int j=i+1;j<=d;j++)
{
if(bfs(i,j)==1)
gr[i][j]=1,gr[j][i]=1;
}
gr[i][i]=1;
}
floydwarshall();
f =1;
for(int i=1;i<=d;i++)
{
for(int j=1;j<=d;j++)
{
if(gr[i][j]==0)
f=0;
}
if(f==0)
break;
}
if(f)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}