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

const int maxn=100000+5;
vector<int> G[maxn];
int deg[maxn];
int res[maxn];
int tot;
int n;
int m;
int k;
string p[maxn];
string s[maxn];
int mt[maxn];
map<string,int> mp;
int qs;
int qt;
int qu[maxn];

int main(){
    ios::sync_with_stdio(false);
    cin>>n>>m>>k;
    for(int i=0;i<n;i++) cin>>p[i],mp[p[i]]=i+1;
    for(int i=0;i<m;i++) cin>>s[i]>>mt[i];
    int cnt=0;
    for(int i=0;i<m;i++){
        int fl=0;
        for(int pp=0;pp<(1<<k);pp++){
            string ts=s[i];
            for(int j=0;j<k;j++){
                if((pp>>j)&1) ts[j]='_';
            }
            if(mp[ts]==mt[i]) fl=1;
            if(mp[ts]>0&&mp[ts]!=mt[i]) G[mt[i]].push_back(mp[ts]),deg[mp[ts]]++;
        }
        if(fl) cnt++;
    }
    for(int i=1;i<=n;i++)
        if(deg[i]==0){
            qu[qt++]=i;
            res[tot++]=i;
        }
    while(qs!=qt){
        int u=qu[qs++];
        for(int i=0;i<G[u].size();i++){
            int v=G[u][i];
            deg[v]--;
            if(deg[v]==0) qu[qt++]=v,res[tot++]=v;
        }
    }
    if(tot==n&&cnt==m){
        cout<<"YES\n";
        for(int i=0;i<tot;i++) cout<<res[i]<<" ";
    }
    else cout<<"NO";
    return 0;
}
