#include <bits/stdc++.h>
using namespace std;
int main() {
  int room[1010], room5[1010];
  for (int i = 0; i < 1010; i++) {
    room[i] = i;
    room5[i] = i;
  }
  int door[1010][2];
  int key[1010][2], key5[1010][2];
  int peo[1010], peo5[1010];
  char peoname[1010][50];
  int numr, numd, nump, numk;
  scanf("%d%d%d", &numr, &numd, &nump);
  for (int i = 1; i <= numd; i++) scanf("%d%d", &door[i][0], &door[i][1]);
  for (int i = 1; i <= nump; i++) {
    scanf("%s", peoname[i]);
    scanf("%d", &peo[i]);
    int k;
    scanf("%d", &k);
    for (int j = 1; j <= k; j++) {
      int q;
      scanf("%d", &q);
      key[q][0] = peo[i];
    }
  }
  numk = numd;
  int h = numk;
  int k = 0;
  while (h >= 0) {
    k = 0;
    for (int i = 1; i <= numk; i++) {
      if (key[i][1] == -1) continue;
      if (room[key[i][0]] == room[door[i][0]] ||
          room[key[i][0]] == room[door[i][1]]) {
        k = 1;
        h--;
        for (int j = 1; j <= numr; j++)
          if (room[j] == room[door[i][0]] || room[j] == room[door[i][1]]) {
            if (room[door[i][0]] < room[door[i][1]])
              room[j] = room[door[i][0]];
            else
              room[j] = room[door[i][1]];
          }
        for (int j = 1; j <= nump; j++)
          if (room[peo[j]] == room[door[i][0]] ||
              room[peo[j]] == room[door[i][1]]) {
            if (room[door[i][0]] < room[door[i][1]])
              peo[j] = room[door[i][0]];
            else
              peo[j] = room[door[i][1]];
          }
        for (int j = 1; j <= numk; j++)
          if (room[key[j][0]] == room[door[i][0]] ||
              room[key[j][0]] == room[door[i][1]]) {
            if (room[door[i][0]] < room[door[i][1]])
              key[j][0] = room[door[i][0]];
            else
              key[j][0] = room[door[i][1]];
          }
        key[i][1] = -1;
      }
    }
    for (int j = 1; j <= numr; j++) {
      while (room[j] != room[room[j]]) {
        room[j] = room[room[j]];
      }
    }
    if (k == 0) break;
  }
  int ans = 1;
  for (int i = 1; i <= nump; i++) {
    char name[50];
    scanf("%s", name);
    int finalr;
    int k;
    for (k = 1; k <= nump; k++)
      if (strcmp(peoname[k], name) == 0) break;
    scanf("%d", &peo5[k]);
    int q;
    scanf("%d", &q);
    for (int j = 1; j <= q; j++) {
      int u;
      scanf("%d", &u);
      key5[u][0] = peo5[k];
    }
  }
  h = numk;
  k = 0;
  while (h >= 0) {
    k = 0;
    for (int i = 1; i <= numk; i++) {
      if (key5[i][1] == -1) continue;
      if (room5[key5[i][0]] == room5[door[i][0]] ||
          room5[key5[i][0]] == room5[door[i][1]]) {
        k = 1;
        for (int j = 1; j <= numr; j++)
          if (room5[j] == room5[door[i][0]] || room5[j] == room5[door[i][1]]) {
            if (room5[door[i][0]] < room5[door[i][1]])
              room5[j] = room5[door[i][0]];
            else
              room5[j] = room5[door[i][1]];
          }
        for (int j = 1; j <= nump; j++)
          if (room5[peo5[j]] == room5[door[i][0]] ||
              room5[peo5[j]] == room5[door[i][1]]) {
            if (room5[door[i][0]] < room5[door[i][1]])
              peo5[j] = room5[door[i][0]];
            else
              peo5[j] = room5[door[i][1]];
          }
        for (int j = 1; j <= numk; j++)
          if (room5[key5[j][0]] == room5[door[i][0]] ||
              room5[key5[j][0]] == room5[door[i][1]]) {
            if (room5[door[i][0]] < room5[door[i][1]])
              key5[j][0] = room5[door[i][0]];
            else
              key5[j][0] = room5[door[i][1]];
          }
        key5[i][1] = -1;
        h--;
      }
    }
    for (int j = 1; j <= numr; j++) {
      while (room5[j] != room5[room5[j]]) {
        room5[j] = room5[room5[j]];
      }
    }
    if (k == 0) break;
  }
  for (int j = 1; j < numr; j++) {
    while (room[j] != room[room[j]]) {
      room[j] = room[room[j]];
    }
    while (room5[j] != room5[room5[j]]) {
      room5[j] = room5[room5[j]];
    }
  }
  for (int j = 1; j <= nump; j++) {
    peo[j] = room[peo[j]];
    peo5[j] = room5[peo5[j]];
  }
  for (int j = 1; j <= numk; j++) {
    key[j][0] = room[key[j][0]];
    key5[j][0] = room5[key5[j][0]];
  }
  for (int i = 1; i <= numk; i++)
    if (key[i][0] != key5[i][0]) {
      ans = 0;
      break;
    }
  for (int i = 1; i <= nump; i++)
    if (peo[i] != peo5[i]) {
      ans = 0;
      break;
    }
  if (ans == 0)
    printf("NO");
  else
    printf("YES");
  return 0;
}
