#include <bits/stdc++.h>
#define maxn 1005
#define MOD 1000000007
using namespace std;
typedef long long ll;
struct Node{
char str[25];
friend bool operator < (const Node&a, const Node&b){
int k = strcmp(a.str, b.str);
if(k < 0)
return true;
return false;
}
};
map<Node, int> mp;
int cnt, d[200005];
Node k1, k2;
int find(int r){
int h = r;
while(h != d[h])
h = d[h];
int pre = r;
while(pre != d[pre]){
r = d[pre];
d[pre] = h;
pre = r;
}
return h;
}
int main(){
//freopen("in.txt", "r", stdin);
int n, m, q;
scanf("%d%d%d", &n, &m, &q);
for(int i = 1; i <= n; i++){
scanf("%s", k1.str);
if(mp[k1] == 0)
mp[k1] = ++cnt;
}
for(int i = 1; i <= 2 * n; i++)
d[i] = i;
int p1, p2, t;
for(int i = 1; i <= m; i++){
scanf("%d%s%s", &t, k1.str, k2.str);
p1 = mp[k1], p2 = mp[k2];
int s1 = find(p1), s2 = find(p1+n);
int m1 = find(p2), m2 = find(p2+n);
if((s1 == m2 && t == 1) || (s1 == m1 && t == 2)){
puts("NO");
}
else{
puts("YES");
if(t == 1){
d[s1] = m1;
d[s2] = m2;
}
else{
d[s1] = m2;
d[m1] = s2;
}
}
}
for(int i = 1; i <= q; i++){
scanf("%s%s", k1.str, k2.str);
p1 = mp[k1], p2 = mp[k2];
int s1 = find(p1), s2 = find(p1+n);
int m1 = find(p2), m2 = find(p2+n);
if(s1 == m1)
puts("1");
else if(s1 == m2)
puts("2");
else
puts("3");
}
return 0;
}