/*
TASK: trip
LANG: C++
*/

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int n, m, k;
vector<vector<int> > G;
vector<bool> visited;
vector<int> used;
vector<int> b;
int ans = -9999;

void bfs(int v, queue<int> &q) {
     for(int i = 0; i < G[v].size(); ++i)
             if( !used[G[v][i]] || used[G[v][i]] == used[v]+1 ) {
                 if( b[G[v][i]] < b[v] + visited[G[v][i]] ) b[G[v][i]] = b[v] + visited[G[v][i]];
                 used[G[v][i]] = used[v]+1;
                 q.push(G[v][i]);
             }
}

int main() {
    cin >> n >> m >> k;
    G.resize(n); visited.resize(n, true); used.resize(n);
    b.resize(n);
    for(int i = 0; i < m; ++i) {
            int k1, k2;
            cin >> k1 >> k2; --k1; --k2;
            G[k1].push_back(k2);
            G[k2].push_back(k1);
    }

    for(int i = 0; i < k; ++i) {
            int k1;
            cin >> k1; visited[k1-1] = false;
    }

    for(int i = 0; i < n; ++i) {
            queue<int> q;
            q.push(i);
            fill(used.begin(), used.end(), false);
            fill(b.begin(), b.end(), 0);
            used[i] = 1; b[i] = visited[i];
            while ( !q.empty() ) {
                  int t = q.front(); q.pop();
                  bfs(t, q);
            }
            for(int j = 0; j < n; ++j)
                if( b[j] > ans ) ans = b[j];
    }
    
    cout << ans << '\n';

    return 0;
}
