from __future__ import print_function import heapq, sys def dijkstra(G, s): V, E = G; d = {}; S = set(); q = [] for u in V: d.setdefault(u, None) for u in s: d[u] = 0; heapq.heappush(q, (0,u)) while q: n, u = heapq.heappop(q) if u in S: continue S.add(u) for v in E[u]: if d[v] is None or d[v] > d[u] + 1: d[v] = d[u] + 1; heapq.heappush(q, (d[v],v)) return d def transpose(G): V, E = G; ET = {} for u in V: ET[u] = [] for u, vs in E.iteritems(): for v in vs: ET[v].append(u) return V, ET n, m, k = map(int, sys.stdin.readline().split()) iron = [ int(x)-1 for x in sys.stdin.readline().split() ] coal = [ int(x)-1 for x in sys.stdin.readline().split() ] V, E = range(n), {} for i, line in enumerate(sys.stdin): E[i] = [ int(x)-1 for x in line.split()[1:] ] G = V, E GT = transpose(G) ds = dijkstra(G, [0]) di = dijkstra(GT, iron) dc = dijkstra(GT, coal) try: m = min( ds[i]+di[i]+dc[i] for i in xrange(n) if None not in (ds[i],di[i],dc[i]) ) print(m) except ValueError as e: if "empty" not in e.args[0]: raise print("impossible")