#include <bits/stdc++.h>
using namespace std;
long long _set(long long N, long long pos) { return N = N | (1 << pos); }
long long _reset(long long N, long long pos) { return N = N & ~(1 << pos); }
bool _check(long long N, long long pos) { return (bool)(N & (1 << pos)); }
bool _upper(char a) { return a >= 'A' && a <= 'Z'; }
bool _lower(char a) { return a >= 'a' && a <= 'z'; }
bool _digit(char a) { return a >= '0' && a <= '9'; }
long long dx[] = {1, -1, 0, 0, -1, -1, 1, 1};
long long dy[] = {0, 0, 1, -1, -1, 1, -1, 1};
bool up[110], upper[110];
int main() {
  int n;
  cin >> n;
  vector<string> v;
  for (int i = 0; i < n; i++) {
    string x;
    cin >> x;
    int L = x.size();
    for (int j = 0; j < L; j++) x[j] = tolower(x[j]);
    v.push_back(x);
  }
  string s;
  char c;
  cin >> s >> c;
  int L = s.size();
  for (int i = 0; i < L; i++)
    if (_upper(s[i])) s[i] = tolower(s[i]), upper[i] = true;
  for (int i = 0; i < L; i++) {
    for (int j = 0; j < n; j++) {
      if (i <= L - v[j].size() && s.substr(i, v[j].size()) == v[j])
        fill(up + i, up + i + v[j].size(), true);
    }
  }
  for (int i = 0; i < L; i++) {
    if (up[i]) {
      if (s[i] == c) {
        if (c == 'a')
          s[i] = 'b';
        else
          s[i] = 'a';
      } else
        s[i] = c;
    }
    if (upper[i]) s[i] = toupper(s[i]);
  }
  cout << s;
  return 0;
}
