#include <bits/stdc++.h>
using namespace std;

bool flag[1005][1005];
int cnt[1005],ara[1005];
vector <int> edges[1005];
multiset <int> indeg;
multiset <int>:: iterator it;
int main ()
{
    int i,u,v,m,n,t,j,s;
    bool chk=true;

    scanf ("%d %d",&n,&m);
    for (i=0;i<m;i++) {
        scanf ("%d %d",&u,&v);
        if (!flag[u][v]) {
            edges[u].push_back(v);
            cnt[v]++;
            flag[u][v]=true;
        }
        if (flag[v][u]) chk=false;
    }
    for (i=1;i<=n;i++) indeg.insert(cnt[i]);
    for (i=1;i<=n;i++) scanf ("%d",&ara[i]);

    if (chk) for (i=1;i<=n;i++) {
        u=ara[i];
        it=indeg.begin();
        if (cnt[u]!=*it) {
            chk=false;
            break;
        }
        indeg.erase(it);
        t=edges[u].size();
        for (j=0;j<t;j++) {
            v=edges[u][j];
            indeg.erase(cnt[v]);
            cnt[v]--;
            indeg.insert(cnt[v]);
        }
    }

    if (chk) cout<<"YES";
    else cout<<"NO";

    return 0;
}