#include <bits/stdc++.h>
using namespace std;
#define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
using ll = long long;
const int maxN = 2e5 + 5;
const int MOD = 1e9 + 7;
inline int read(){
int res=0; char ch=getchar();
while(ch < '0' || '9' < ch) ch=getchar();
while('0' <= ch && ch <= '9'){
res=(res<<3) + (res<<1)+ch-'0';
ch=getchar();
}
return res;
}
int main() {
/*freopen("../input.txt", "r", stdin);
freopen("../output.txt", "w", stdout);*/
InTheNameOfGod;
int n,m,k;
n = read(); m = read(); k = read();
vector<vector<int> > g(n+1), tav(n+1, vector<int>(2, -1));
vector<int> a(k);
for(int &i : a) i = read();
for(int i = 0; i < m; i++) {
int x,y;
x = read(); y = read();
g[x].push_back(y);
g[y].push_back(x);
}
vector<int > pref(n+3, 0);
queue<pair<int, int > > sor;
for(int i = 0; i < k; i++) {
if(!g[a[i]].empty()) {
tav[a[i]][0] = 1;
pref[1]++;
sor.push({a[i], 0});
}
else {
pref[1]++;
pref[3]--;
//cout << "empty: " << a[i] << endl;
}
}
while(!sor.empty()) {
pair<int, bool> cur = sor.front();
sor.pop();
//cout << cur.first << ", " << cur.second << ": " << tav[cur.first][cur.second] << endl;
for(int sz : g[cur.first]) {
if(tav[sz][1-cur.second] != -1) continue;
tav[sz][1-cur.second] = tav[cur.first][cur.second] + 1;
pref[tav[sz][1-cur.second]]++;
sor.push({sz, 1-cur.second});
}
}
/*for(int i = 1; i < 7; i++) cout << pref[i][0] << ' ';
cout << endl;
for(int i = 1; i < 7; i++) cout << pref[i][1] << ' ';
cout << endl;*/
vector<int> mo(n+3, 0);
mo[1] = pref[1];
int maxi = mo[1], ind = 1;
for(int i = 2; i < pref.size(); i++) {
mo[i] = pref[i];
if(mo[i] > maxi) {
maxi = mo[i];
ind = i;
}
}
cout << maxi << "\n" << ind << "\n";
for(int i = 1; i <= ind; i++) cout << mo[i] << ' ';
cout << "\n";
return 0;
}