#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;struct Edge{ int x, y, d, z; void set(int _x, int _y, int _d, int _z){ x = _x; y = _y; d = _d; z = _z; }} eg[100];int cnt, n, force[13];#define bit(k) (1<<(k))bool vis[12][5000000];bool dfs(int u, int state){ if((state&(bit(cnt)-1)) == bit(cnt)-1) return true; if(vis[u][state]) return false; vis[u][state] = true; if(force[u]>=0){ return dfs(force[u],state^bit(cnt+u)); } int i; for(i=0;i<cnt;i++){ Edge uu = eg[i]; if(bit(i) & state)continue; if(!uu.d){ if(uu.x == u){ if(dfs(uu.y,state^bit(i)^bit(cnt+u))) return true;else continue; } else if(uu.y==u){ if(dfs(uu.x,state^bit(i)^bit(cnt+u))) return true;else continue; } else continue; } else{ if(uu.z>=0){ if(state&bit(cnt+uu.z)){ if(uu.y != u) continue; if(dfs(uu.x,state^bit(i)^bit(cnt+u))) return true;else continue; } else{ if(uu.x != u) continue; if(dfs(uu.y,state^bit(i)^bit(cnt+u))) return true;else continue; } } else{ if(uu.x!=u)continue; if(dfs(uu.y,state^bit(i)^bit(cnt+u))) return true;else continue; } } } return false;}int main(){ int m, w, x, y, tmp, d, z, l, r, i; while(scanf("%d%d%d",&n,&m,&w)!=EOF){ cnt = 0; while(m--){ scanf("%d%d%d%d%d",&x,&y,&tmp,&d,&z); while(tmp--){ eg[cnt++].set(x,y,d,z); } } memset(force,-1,sizeof(force)); while(w--){ scanf("%d%d",&l,&r); force[l] = r; } memset(vis,0,sizeof(vis)); for(i=0;i<n;i++) if(dfs(i,0)) break; if(i<n) puts("Yes");else puts("No"); } return 0;}


