N,M,K=map(int,raw_input().split()) edge=[[]for i in range(N)] for i in range(M): a,b,c = map(int,raw_input().split()) edge[a-1].append((b-1,c)) edge[b-1].append((a-1,c)) d=map(int,raw_input().split()) d.reverse() ans = [] def dfs(cur,depth): if depth==K: return True for i in range(len(edge[cur])): nxt,cost = edge[cur][i] if cost == d[depth] and dfs(nxt,depth+1): return True return False for i in range(N): if dfs(i,0): ans.append(i) print len(ans) for a in ans: print a+1,