#include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef vector VI; #define REP(i,n) for(int i=0; i inline T &amin(T &a, T b) { if (a>b) a=b; return a; } template inline T &amax(T &a, T b) { if (a > > mp; // cost -> [(v, v)] int main() { scanf("%d%d%d", &N, &M, &K); REP (i, M) { int a, b, c; scanf("%d%d%d", &a, &b, &c); mp[c].push_back(make_pair(a, b)); } int D; set se; REP (i, N) se.insert(i+1); REP (i, K) { scanf("%d", &D); set nxt; REP (i, mp[D].size()) { int v = mp[D][i].first, w = mp[D][i].second; if (se.count(w)) nxt.insert(v); if (se.count(v)) nxt.insert(w); } se.swap(nxt); } printf("%d\n", (int)se.size()); bool sp = false; EACH (it, se) { if (sp) putchar(' '); sp = true; printf("%d", *it); } putchar('\n'); return 0; }