#include using namespace std; typedef vector< int > vi; typedef vector< vi > vvi; signed main(){ int N, M, K; cin >> N >> M >> K; vi A( M ), B( M ), C( M ); for( int i = 0; i < M; ++i ) cin >> A[ i ] >> B[ i ] >> C[ i ], --A[ i ], --B[ i ]; vi D( K ); for( int i = 0; i < K; ++i ) cin >> D[ i ]; queue< pair< int, int > > que; vvi vis( K + 1, vi( N ) ); for( int i = 0; i < N; ++i ) que.emplace( 0, i ), vis[ 0 ][ i ] = 1; while( not que.empty() ){ int d, u; tie( d, u ) = que.front(); que.pop(); for( int i = 0; i < M; ++i ) if( A[ i ] == u or B[ i ] == u ) if( C[ i ] == D[ d ] ) if( not vis[ d + 1 ][ A[ i ] == u ? B[ i ] : A[ i ] ] ) que.emplace( d + 1, A[ i ] == u ? B[ i ] : A[ i ] ), vis[ d + 1 ][ A[ i ] == u ? B[ i ] : A[ i ] ] = 1; } vi ans; for( int i = 0; i < N; ++i ) if( vis[ K ][ i ] ) ans.emplace_back( i + 1 ); cout << ans.size() << endl; for( int i = 0; i < ans.size(); ++i ) cout << ans[ i ] << " \n"[ i + 1 == ans.size() ]; return 0; }