#include<cstdio>
#include<vector>
#include<memory.h>
using namespace std;

const int max_n = 100, limit = 3000;
int n,m,N;
int black[max_n*max_n][2],t[max_n],cnt[max_n];
bool chk[max_n];
vector<int> v[max_n];
FILE *solution, *input;

bool checkimpossible() {
    int runtime = 0;
    while(1) {
        bool poss = true;
        for(int i=1;i<=n;i++) {
            int ct = 0;
            for(int j=0;j<(int)v[i].size();j++) {
                if((chk[i] ^ chk[v[i][j]]) == false) ct ++;
            }
            if(ct>1) {
                poss = false;
                chk[i] = !chk[i];
            }
        }
        if(poss) return false;
        runtime ++;
        if(runtime > limit) return true;
    }
}

bool checker() {
    fscanf(input,"%d %d",&n,&m);
    for(int i=0;i<m;i++) {
        fscanf(input,"%d %d",&black[i][0], &black[i][1]);
        v[black[i][0]].push_back(black[i][1]);
        v[black[i][1]].push_back(black[i][0]);
    }
    fscanf(solution,"%d",&N);

    if(N == -1) return checkimpossible();

    for(int i=0;i<N;i++) {
        int x;
        fscanf(solution,"%d",&x);
        if(x<1 || x>n) return false;
        chk[x] = true;
    }

    for(int i=0;i<m;i++) {
        if(chk[black[i][0]] ^ chk[black[i][1]]) continue;
        cnt[black[i][0]] ++;
        cnt[black[i][1]] ++;
    }
    for(int i=1;i<=n;i++) {
        if(cnt[i] > 1) return false;
    }
    return true;
}

int main() {
    solution = fopen("/var/www/bbs/prob/1366/output.txt", "r"); // Ã¤Á¡¹Þ¾Æ¾ß ÇÏ´Â »ç¶÷ÀÌ ÀÛ¼ºÇÑ ÆÄÀÏ
    input = fopen("/var/www/bbs/prob/1366/input.txt","r"); // ¹®Á¦ µ¥ÀÌÅÍ ÆÄÀÏ
    if(checker()) printf("1"); // checker()°¡ trueÀÌ¸é ¸Â´Â ¼Ö·ç¼ÇÀÔ´Ï´Ù.
    else printf("0"); // checker()°¡ falseÀÌ¸é Æ²¸° ¼Ö·ç¼ÇÀÔ´Ï´Ù.
    return 0;
}

