#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:10000000")
using namespace std;
template <typename T>
inline T abs(T a) {
  return ((a < 0) ? -a : a);
}
template <typename T>
inline T sqr(T a) {
  return a * a;
}
const int INF = (int)1E9 + 7;
const long double EPS = 1E-9;
const long double PI = 3.1415926535897932384626433832795;
int n;
string a[200];
string w;
int main() {
  cin >> n;
  for (int i = 0; i < int(n); ++i) cin >> a[i];
  cin >> w;
  vector<char> used(int((w).size()), 0);
  for (int i = 0; i < int(int((w).size())); ++i) {
    for (int j = 0; j < int(n); ++j) {
      if (i + int((a[j]).size()) - 1 < int((w).size())) {
        bool eq = true;
        for (int k = 0; k < int(int((a[j]).size())); ++k)
          if (tolower(a[j][k]) != tolower(w[i + k])) {
            eq = false;
            break;
          }
        if (eq) {
          for (int k = 0; k < int(int((a[j]).size())); ++k) used[i + k] = true;
        }
      }
    }
  }
  char L;
  cin >> L;
  char cc = 'a';
  while (cc == tolower(L)) cc++;
  for (int i = 0; i < int(int((w).size())); ++i) {
    if (used[i]) {
      if (tolower(w[i]) == tolower(L)) {
        w[i] = islower(w[i]) ? tolower(cc) : toupper(cc);
      } else
        w[i] = islower(w[i]) ? tolower(L) : toupper(L);
    }
  }
  cout << w << endl;
  return 0;
}
