#include <bits/stdc++.h>
#include <experimental/random>
#include <random>
//#include <ext/pb_ds/assoc_container.hpp>
//using namespace __gnu_pbds;
using namespace std;
using ld = long double;
using ll = long long;
const ll INF = 1e18, MOD = 1e9 + 7;
void solve();
signed main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int q = 1;
//cin >> q;
while (q--) {
solve();
}
}
void solve() {
int n, m, q;
cin >> n >> m >> q;
vector<pair<int, int>> edges(m);
vector<vector<int>> g(n);
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
u--; v--;
g[u].push_back(v);
g[v].push_back(u);
edges[i] = {u, v};
}
vector<int> dist(n, -1);
queue<int> bfs;
bfs.push(0);
dist[0] = 0;
while (!bfs.empty()) {
int v = bfs.front();
bfs.pop();
for (auto u : g[v]) {
if (dist[u] == -1) {
dist[u] = dist[v] + 1;
bfs.push(u);
}
}
}
vector<vector<int>> dag_out(n);
vector<int> in_degree(n, 0);
vector<int> dag_u(m, -1), dag_v(m, -1);
for (int i = 0; i < m; i++) {
int u = edges[i].first, v = edges[i].second;
if (dist[v] == dist[u] + 1) {
dag_out[u].push_back(i);
in_degree[v]++;
dag_u[i] = u;
dag_v[i] = v;
} else if (dist[u] == dist[v] + 1) {
dag_out[v].push_back(i);
in_degree[u]++;
dag_u[i] = v;
dag_v[i] = u;
}
}
vector<bool> broken_node(n, false);
vector<bool> broken_edge(m, false);
int ans = 0;
auto break_node = [&](int start_v, auto& self) -> void {
queue<int> q_break;
broken_node[start_v] = true;
ans++;
q_break.push(start_v);
while (!q_break.empty()) {
int curr = q_break.front();
q_break.pop();
for (int edge_id : dag_out[curr]) {
if (!broken_edge[edge_id]) {
broken_edge[edge_id] = true;
int next_v = dag_v[edge_id];
if (!broken_node[next_v]) {
in_degree[next_v]--;
if (in_degree[next_v] == 0) {
broken_node[next_v] = true;
ans++;
q_break.push(next_v);
}
}
}
}
}
};
for (int i = 0; i < q; i++) {
int id;
cin >> id;
id--;
if (dag_u[id] != -1 && !broken_edge[id]) {
broken_edge[id] = true;
int v = dag_v[id];
if (!broken_node[v]) {
in_degree[v]--;
if (in_degree[v] == 0) {
break_node(v, break_node);
}
}
}
cout << ans << '\n';
}
}