#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
const int INF=1e9+7;
int n,m,q,t[N],dp[N];
array <int,2> d[N];
vector <array <int,2>> adj[N];
priority_queue <array <int,3>> pq;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> q;
for(int i=1;i<=m;i++){
int u,v;
cin >> u >> v;
adj[u].push_back({v,i});
adj[v].push_back({u,i});
}
for(int i=1;i<=m;i++) t[i]=INF;
for(int i=1;i<=q;i++){
int x;
cin >> x;
t[x]=i;
}
for(int i=1;i<=n;i++) d[i]={INF,1};
pq.push({d[1][0]=0,d[1][1]=INF,1});
while(!pq.empty()){
auto [d_u,mn_u,u]=pq.top();
pq.pop();
d_u*=-1;
//cout << u << " -> " << d_u << " , " << mn_u << "\n";
for(auto [v,idx_v]:adj[u]){
int d_v=d_u+1;
int mn_v=min(mn_u,t[idx_v]);
if(d_v<d[v][0]){
//cout << u << " -> " << v << " = " << d_v << " , " <<
d[v]={d_v,mn_v};
pq.push({-d_v,mn_v,v});
}
else if(d_v==d[v][0] && mn_v>d[v][1]){
d[v]={d_v,mn_v};
pq.push({-d_v,mn_v,v});
}
}
}
for(int i=2;i<=n;i++) if(d[i][1]!=INF) dp[d[i][1]]++;
for(int i=1;i<=q;i++){
dp[i]+=dp[i-1];
cout << dp[i] << "\n";
}
}