#include #include #include #include #include #include #include #include using namespace std; int n, m, a, dsafe, t1, t2, t3; int safecnt; bool danger[10042]; vector< pair > edges[10042]; void dfs(int v, int d) { if (!danger[v]) { //printf("%d is now in danger!\n", v); danger[v] = true; --safecnt; } for (vector< pair >::iterator it = edges[v].begin(); it != edges[v].end(); ++it) { if (d - it->second > 0) { dfs(it->first, d - it->second); } } } int main() { scanf("%d %d %d %d", &n, &m, &a, &dsafe); while (n) { for (int i = 0; i < n; ++i) { edges[i].clear(); danger[i] = false; } safecnt = n; for (int i = 0; i < m; ++i) { scanf("%d %d %d", &t1, &t2, &t3); --t1; --t2; edges[t1].push_back(make_pair(t2, t3)); edges[t2].push_back(make_pair(t1, t3)); } for (int i = 0; i < a; ++i) { scanf("%d", &t1); --t1; dfs(t1, dsafe); printf("%d\n", safecnt); } printf("\n"); scanf("%d %d %d %d", &n, &m, &a, &dsafe); } }