#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n,m,k; int a,b,c; int d[1000]; vector to[100]; vector cost[100]; int dp[1001][100]; int main(){ int i,j,l; cin >> n >> m >> k; for( i = 0; i < m; i++ ){ cin >> a >> b >> c; a--;b--; to[a].push_back(b); to[b].push_back(a); cost[a].push_back(c); cost[b].push_back(c); } for( i = 0; i < k; i++ ){ cin >> d[i]; } for( i = 0; i < n; i++ ){ dp[0][i] = 1; } for( i = 0; i < k; i++ ){ for( j = 0; j < n; j++ ){ //cout << dp[i][j] << " " ; if( dp[i][j] == 0 ) continue; for( l = 0; l < to[j].size(); l++ ){ if( cost[j][l] == d[i] ) dp[i+1][ to[j][l] ] = 1; } } //cout << endl; } int maxuse = -1,cnt = 0; for( i = 0; i < n; i++ ){ if( dp[k][i] == 1 ){ cnt++; maxuse = max( maxuse, i ); } } cout << cnt << endl; for( i = 0; i < n; i++ ){ if( dp[k][i] == 1 ){ cout << i+1; if( i != maxuse ) cout << " "; else cout << endl; } } return 0; }