WA #11 #16 #19
#include<bits/stdc++.h>
#define N 5005
using namespace std;
inline int read(){
int x(0),f(1);char c(getchar());
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return x*f;
}
void write(int x){
if(x>9) write(x/10);
putchar(x%10^48);
}
void write(int x,char ch){
if(x<0) putchar('-'),x=-x;
write(x);putchar(ch);
}
int n,k,p,r,v,s,u,IN[N];
int head[N],nxt[N*N],to[N*N],cnt;
inline void add(int x,int y){
to[++cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
}
queue <int> q;
int f[N];
int main(){
n=read();k=read();p=read();
for(int i(1);i<=p;++i) IN[read()]=-1;
r=read();
for(int i(1);i<=r;++i){
v=read();s=read();
for(int j(1);j<=s;++j){
u=read();
if(~IN[v]) add(u,v);
}
if(~IN[v]) IN[v]+=s;
}
memset(f,-1,sizeof(f));
for(int i(1);i<=n;++i){
if(~IN[i]) continue;
IN[i]=0;f[i]=0;q.push(i);
}
while(!q.empty()){
int x(q.front());q.pop();
for(int i(head[x]);i;i=nxt[i]){
int y(to[i]);--IN[y];
if(!IN[y]){f[y]=f[x]+1;q.push(y);}
}
}
write(f[k],'\n');
return 0;
}