#include #include #include #define repi(i,a,b) for(int i=(a);i<(b);++i) #define rep(i,a) repi(i,0,a) #define repd(i,a) for(int i=(a);i>=0;--i) #define clr(a,v) memset((a),(v),sizeof(a)) #define all(a) (a).begin(), (a).end() typedef std::pair P; int N, M, K; int d[1000]; std::vector

G[100]; bool dp[1001][100]; int main() { scanf( "%d%d%d", &N, &M, &K ); rep( i, M ) { int a, b, c; scanf( "%d%d%d", &a, &b, &c ); --a; --b; G[a].push_back( P( b, c ) ); G[b].push_back( P( a, c ) ); } rep( i, K ) scanf( "%d", d+i ); rep( j, N ) dp[0][j] = true; rep( i, K ) { rep( j, N ) rep( k, G[j].size() ) { const P &e = G[j][k]; if( e.second != d[i] ) continue; dp[i+1][e.first] |= dp[i][j]; } } std::vector v; rep( j, N ) if( dp[K][j] ) v.push_back( j+1 ); printf( "%d\n", v.size() ); rep( i, v.size() ) printf( "%d%c", v[i], i==v.size()-1?'\n':' ' ); return 0; }