#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
struct edge
{
int v, s, p[MAXN];
}cun[MAXN];
int N, K, p, R, day[MAXN];
bool vis[MAXN];
vector<int> cnt[MAXN];
queue<int> q;
int main()
{
scanf("%d%d%d", &N, &K, &p);
for (int i = 1; i <= p; i++)
{
int x;
scanf("%d", &x);
cnt[0].push_back(x);
}
scanf("%d", &R);
for (int i = 1; i <= R; i++)
{
scanf("%d%d", &cun[i].v, &cun[i].s);
for (int j = 1; j <= cun[i].s; j++)
{
scanf("%d", &cun[i].p[j]);
}
}
for (int i = 0; i <= N; i++)
{
day[i] = -1;
}
for (auto x : cnt[0])
{
day[x] = 0;
q.push(x);
}
int ans = -1;
while (!q.empty())
{
int u = q.front();
q.pop();
if (u == K)
{
ans = day[u];
break;
}
if (vis[u])
{
continue;
}
vis[u] = true;
for (int i = 1; i <= R; i++)
{
bool flag = false;
for (int j = 1; j <= cun[i].s; j++)
{
if (!vis[cun[i].p[j]])
{
flag = true;
break;
}
}
if (!flag)
{
for (int j = 1; j <= cun[i].s; j++)
{
if (day[cun[i].p[j]] == day[u])
{
if (day[cun[i].v] == -1)
{
day[cun[i].v] = day[u] + 1;
q.push(cun[i].v);
}
break;
}
}
}
}
}
printf("%d\n", ans);
return 0;
}