#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
const int Maxn=1010;
struct Node{
int layer;
int id;
};
//输入
int N,L;
vector<Node> Adj[Maxn];//邻接表
bool inq[Maxn]={false};//该结点是否进过队列
int BFS(int s,int Max_layer){
int numForward=0;//转发总数
queue<Node> q;
Node start;
start.id=s;
start.layer=0;
inq[start.id]=true;
q.push(start);
while(!q.empty()){
Node top=q.front();
q.pop();
for(int i=0;i<Adj[top.id].size();i++){
if(!inq[Adj[top.id][i].id]&&(top.layer+1)<=L){
numForward++;
inq[Adj[top.id][i].id]=true;
Adj[top.id][i].layer=top.layer+1;
q.push(Adj[top.id][i]);
}
}
}
return numForward;
}
int main()
{
scanf("%d %d",&N,&L);
Node user;//当前用户
for(int i=1;i<=N;i++){
user.id=i;
int follow;//i号关注的人数
scanf("%d",&follow);
for(int j=0;j<follow;j++){
int followuser;
scanf("%d",&followuser);
Adj[followuser].push_back(user);//被关注用户指向当前的用户user
}
}
int K;
scanf("%d",&K);
for(int i=0;i<K;i++){
memset(inq,false,sizeof(inq));
int s;
scanf("%d",&s);
printf("%d\n",BFS(s,L));
}
return 0;
}