//1076 Forwards on Weibo 部分正确 天勤 算法下P354
#include <iostream>
#include <queue>
#define maxSize 100
using namespace std;
int N,L;
int MGraph[maxSize][maxSize] = {0};
int BFS(int v,int L){
queue<int> que;
// bool flags[maxSize] = {0};
int flags[maxSize] = {0};
que.push(v);
flags[v] = 1;
int curLayer = 1,nextLayer = 0,layer = 0,count = 0;
while(!que.empty() && layer < L){
int v = que.front();
que.pop();
--curLayer;
for(int i=1;i<=N;++i){
if(!flags[i] && MGraph[v][i] !=0){
que.push(i);
flags[i] = 1;
++count;
++nextLayer;
}
}
if(curLayer == 0){
++layer;
curLayer = nextLayer;
nextLayer = 0;
}
}
return count;
}
int main(){
cin>>N>>L;
for(int i=1;i<=N;++i){
int t,f;
cin>>t;
while(t--){
cin>>f;
MGraph[f][i] = 1;
}
}
int K;
cin>>K;
int arr[K];
for(int i=0;i<K;++i){
int v;
cin>>v;
arr[i] = BFS(v,L);
}
for(int i=0;i<K;++i){
cout<<arr[i];
if(i<K-1) cout<<endl;
}
return 0;
}
//todo P356下
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int MAXV = 1010;
struct Node{
int id;//结点编号
int layer;//结点层号
};
vector<Node> Adj[MAXV]; //邻接表
bool inq[MAXV] = {false};
int BFS(int s,int L){
int numForward = 0;
queue<Node> q;
Node start;
start.id = s;
start.layer = 0;
q.push(start);
inq[start.id] = true;
while(!q.empty()){
Node topNode = q.front();
q.pop();
int u = topNode.id;
for(int i=0;i<Adj[u].size();i++){
Node next = Adj[u][i];
next.layer = topNode.layer + 1;
if(!inq[next.id] && next.layer <= L){
q.push(next);
inq[next.id] = true;
numForward++;
}
}
}
return numForward;
}
int main(){
Node user;
int n,L,numFollow,idFollow;
scanf("%d%d",&n,&L);
for(int i=1;i<=n;++i){
user.id = 1;
scanf("%d",&numFollow);
for(int j=0;j<numFollow;j++){
scanf("%d",&idFollow);
Adj[idFollow].push_back(user);
}
}
int numQuery,s;
scanf("%d",&numQuery);
for(int i=0;i<numQuery;i++){
memset(inq,false,sizeof(inq));
scanf("%d",&s);
int numForward = BFS(s,L);
printf("%d\n",numForward);
}
return 0;
}