//记录每一个film的已经确定喜欢的数
//记录film最多有几个喜欢的明星数
//然后比较,如果对于这个film,它已经确定的喜欢的数大于等于其他的film的最多的喜欢的明星,那么0
//如果存在一个其他film已经确定的喜欢的数大于这个film最多喜欢的明星数,那么1
//其他2
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 110 ;
struct node
{
int like;
int unsure;
}film[maxn] ;
int star[maxn] ;
int vis[maxn] ;
int temp[maxn] ;
int main()
{
int m , k ;
char str[20];
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
while(~scanf("%d%d" ,&m,&k))
{
memset(star , 0 , sizeof(star));
memset(film , 0 , sizeof(film)) ;
memset(vis , 0 ,sizeof(vis)) ;
for(int i = 1;i <= k;i++)
{
int t;
scanf("%d" ,&t) ;
star[t] = 1;
}
int block;
scanf("%d" ,&block);
for(int i = 1;i <= block;i++)
{
int n ;
int sum_l = 0;int sum_u = 0;
scanf("%s" ,str) ;
scanf("%d" ,&n) ;
for(int j = 1;j <= n;j++)
{
scanf("%d" ,&temp[j]) ;
if(!temp[j])
sum_u++;
else if(star[temp[j]])
sum_l++;
}
if(n == m)for(int j = 1;j <= n;j++)vis[j] = 1;
film[i].unsure = min(k , sum_l+sum_u);
film[i].like = sum_l;
if(n - sum_l > (m-k))
film[i].like = n-(m-k);
}
for(int i = 1;i <= block;i++)
{
int flag = 0 ;
for(int j = 1;j <= block;j++)
{
if(i == j)continue;
if(film[i].like < film[j].unsure)
flag = 1;
}
if(!flag){puts("0");continue;}
flag = 0;
for(int j = 1;j <= block;j++)
{
if(i == j)continue ;
if(film[i].unsure < film[j].like)
flag = 1;
}
if(flag){puts("1");continue;}
puts("2");
}
}
return 0;
}