#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using pll=pair; // using mint=modint; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; struct Edge{ ll a,b,c; }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N,M,K; cin>>N>>M>>K; vectore(M); rep(i,0,M){ cin>>e[i].a>>e[i].b>>e[i].c; e[i].a--,e[i].b--; } vectorpossible(N,true); rep(i,0,K){ vectornxt(N,false); ll d; cin>>d; for(auto x:e){ ll u=x.a,v=x.b,c=x.c; if(c!=d)continue; if(possible[u])nxt[v]=true; if(possible[v])nxt[u]=true; } swap(nxt,possible); } vll ans; rep(i,0,N){ if(possible[i])ans.push_back(i+1); } ll m=sz(ans); cout<