#include<stdio.h>
#include<iostream>
using namespace std;
const int N=405;
const int M=10005;
int n,F,D,i,j,x,y,z,ans,src,tar,dis[N],g[N];
int tot,head[N],Next[M],to[M],v[M];
void add(int x,int y,int z)
{
to[tot]=y;
v[tot]=z;
Next[tot]=head[x];
head[x]=tot++;
}
bool bfs()
{
int t=0,w=1,i;
for(i=1;i<=n;i++) dis[i]=0;
dis[src]=1;g[1]=src;
while(t<w)
{
int x=g[++t];
for(i=head[x];i!=-1;i=Next[i])
{
int y=to[i];
if(!dis[y]&&v[i]>0)
{
dis[y]=dis[x]+1;
g[++w]=y;
if(y==tar) return 1;
}
}
}
return 0;
}
int dfs(int x,int s)
{
if(x==tar) return s;
int flow=0,i;
for(i=head[x];i!=-1;i=Next[i])
{
int y=to[i];
if(dis[y]==dis[x]+1&&v[i]>0)
{
int tmp=dfs(y,min(s-flow,v[i]));
flow+=tmp;
v[i]-=tmp;
v[i^1]+=tmp;
if(flow==s) return flow;
}
}
return flow;
}
int main()
{
scanf("%d%d%d",&n,&F,&D);
src=n*2+F+D+1;tar=n*2+F+D+2;
for(i=1;i<=n*2+F+D+2;i++) head[i]=-1;
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
add(i,n+i,1);add(n+i,i,0);
for(j=1;j<=x;j++)
{
scanf("%d",&z);
add(n*2+z,i,1);add(i,n*2+z,0);
}
for(j=1;j<=y;j++)
{
scanf("%d",&z);
add(n+i,n*2+F+z,1);add(n*2+F+z,n+i,0);
}
}
for(i=1;i<=F;i++)
{
add(src,n*2+i,1);
add(n*2+i,src,0);
}
for(i=1;i<=D;i++)
{
add(n*2+F+i,tar,1);
add(tar,n*2+F+i,0);
}
n=n*2+F+D+2;
while(bfs()) ans+=dfs(src,1e9);
cout<<ans;
return 0;
}