#include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,n) for(ll i=0;i P; typedef long long ll; typedef vector vi; int N, M, K; int a[1001], b[1001], c[1001]; int d[1001]; //dp[i][j]:i回移動した後、街jに存在するか? bool dp[10001][1001]; int main(){ cin >> N >> M >> K; rep(i, M){ cin >> a[i] >> b[i] >> c[i]; a[i]--; b[i]--; } rep(i, K) cin >> d[i]; memset(dp, false, sizeof(dp)); rep(i, 1001) dp[0][i] = true; rep(i, K){ const int dist = d[i]; const int before = i; const int after = i + 1; for (int j = 0; j < M; j++){ if (dist == c[j]){ if (dp[before][a[j]]) dp[after][b[j]] = true; if (dp[before][b[j]]) dp[after][a[j]] = true; } } } vi A; int ans = 0; rep(i, N){ if (dp[K][i]){ ans++; A.push_back(i + 1); } } cout << ans << endl; bool f = false; rep(i, ans){ if (!f){ cout << A[i]; f = true; } else{ cout << " " << A[i]; } } cout << endl; return 0; }