#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500;
int g[MAXN][MAXN], c[2], N, M, L;
char a[MAXN], s[MAXN], r[MAXN];
int t(char x) { return x == 'C'; }
int ok(int i, int j) {
  i = 2 * i + t(a[r[i] - 'a']), j = 2 * j + t(a[r[j] - 'a']);
  return !g[i][j ^ 1] && !g[j][i ^ 1];
}
int f(int i, int gr) {
  if (i == N) {
    puts(r);
    exit(0);
  }
  for (int x = (gr ? 'a' : s[i]); x < ('a' + L); x++) {
    r[i] = x;
    for (int j = (0); j < (i + 1); j++)
      if (!ok(j, i)) goto end;
    if (f(i + 1, gr || r[i] > s[i])) return 1;
  end:;
  }
  return 0;
}
int main() {
  scanf("%s%d%d\n", a, &N, &M);
  L = strlen(a);
  for (int i = (0); i < (L); i++) c[t(a[i])] = 1;
  if (!c[0] || !c[1])
    for (int i = (0); i < (N); i++) g[2 * i + c[0]][2 * i + c[0] ^ 1] = 1;
  for (int i = (0); i < (M); i++) {
    int x, y;
    char p, q;
    scanf("%d %c %d %c\n", &x, &p, &y, &q);
    x = 2 * (x - 1) + t(p), y = 2 * (y - 1) + t(q);
    g[x][y] = g[y ^ 1][x ^ 1] = 1;
  }
  scanf("%s", s);
  for (int k = (0); k < (2 * N); k++)
    for (int i = (0); i < (2 * N); i++)
      for (int j = (0); j < (2 * N); j++) g[i][j] |= g[i][k] && g[k][j];
  for (int i = (0); i < (2 * N); i++)
    if (g[i][i ^ 1] && g[i ^ 1][i]) {
      puts("-1");
      return 0;
    }
  f(0, 0);
  puts("-1");
}
