#include <cstdio>
#include <iostream>
using namespace std;

const int MaxN = 1001;

FILE *in, *out, *score;

long n, m;
bool adj[MaxN][MaxN];
int grupa[MaxN];
long g1, g2;

int main(int argc, char * arg [])
{
	in = fopen("mika.in", "r");
	out = fopen("mika.out", "r");
	score = fopen("score.tmp", "w");

	memset(adj, 0, sizeof(adj));
	fscanf(in, "%ld %ld", &n, &m);
	for (long i = 0; i < m; i++)
	{
		long a, b;
		fscanf(in, "%ld %ld", &a, &b);
		a--; b--;
		adj[a][b] = true; adj[b][a] = true;
	}
	fclose(in);

	if (fscanf(out, "%ld", &g1) <= 0)
	{
		fprintf(score, "0\n");
		fclose(score);
		return 0;
	}
	if (g1 == -1)
	{
		fprintf(score, "0\n");
		fclose(score);
		return 0;
	}

	memset(grupa, 0, sizeof(grupa));
	if (fscanf(out, "%ld", &g2) <= 0)
		fprintf(score, "0\n");

	else if (g1 + g2 != n)
		fprintf(score, "0\n");

	else
	{
		// grupa1
		for (int i = 0; i < g1; i++)
		{
			long cvor;
			if (fscanf(out, "%ld", &cvor) <= 0)
			{
				fprintf(score, "0\n");
				fclose(score);
				return 0;
			}
			else if (grupa[cvor] != 0)
			{
				fprintf(score, "0\n");
				fclose(score);
				return 0;
			}
			else grupa[cvor] = 1;
		}

		// grupa2
		for (int i = 0; i < g2; i++)
		{
			long cvor;
			if (fscanf(out, "%ld", &cvor) <= 0)
			{
				fprintf(score, "0\n");
				fclose(score);
				return 0;
			}
			else if (grupa[cvor] != 0)
			{
				fprintf(score, "0\n");
				fclose(score);
				return 0;
			}
			else grupa[cvor] = 2;
		}


		long grana = 0;
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				if (grupa[i] != grupa[j]) grana++;

		if (grana >= m / 2)
			fprintf(score, "5\n");
		else
			fprintf(score, "0\n");
	}
	fclose(out);
	fclose(score);

	return 0;
}

