#include using namespace std; #define REP(i,last) for (int i=0;i p_ii; typedef long long ll; const int MAX_N = 100; const int MAX_M = 1000; const int MAX_K = 1000; struct root { int a, b, c; }; root roots[MAX_M]; int d[MAX_K]; int main(){ roots[0].a = 12; int N, M, K; cin >> N >> M >> K; REP(i,M){ cin >> roots[i].a >> roots[i].b >> roots[i].c; --roots[i].a; --roots[i].b; } REP(i,K){ cin >> d[i]; } bool candidate[N]; bool new_candidate[N]; fill(candidate, candidate+N, true); fill(new_candidate, new_candidate+N, false); REP(i,K){ int pay = d[i]; REP(j,M){ if (roots[j].c != pay) continue; new_candidate[roots[j].a] |= candidate[roots[j].b]; new_candidate[roots[j].b] |= candidate[roots[j].a]; } REP(i,N){ candidate[i] = new_candidate[i]; new_candidate[i] = false; } } cout << count(candidate, candidate+N, true) << endl; REP(i,N){ if (candidate[i]) { prints(i+1); } } cout << endl; }