#include <bits/stdc++.h>
using namespace std;
string s1, s2, v;
int pi[110];
bool vis[110][110][110];
pair<int, string> dp[110][110][110];
void pifunc() {
  int nk = 0;
  for (int i = 1; i < v.size(); i++) {
    while (nk && v[nk] != v[i]) nk = pi[nk - 1];
    if (v[nk] == v[i]) nk++;
    pi[i] = nk;
  }
}
pair<int, string> solve(int i, int j, int k) {
  if (i >= s1.size() || j >= s2.size()) return make_pair(0, "");
  if (vis[i][j][k]) return dp[i][j][k];
  vis[i][j][k] = 1;
  pair<int, string> tmp = make_pair(0, ""), op1 = tmp, op2 = tmp, op3 = tmp;
  if (s1[i] == s2[j]) {
    int nk = k;
    if (s1[i] == v[k])
      nk++;
    else if (!k)
      nk = 0;
    else {
      nk = pi[k - 1];
      while (nk && v[nk] != s1[i]) nk = pi[nk - 1];
      if (v[nk] == s1[i]) nk++;
    }
    if (nk != v.size())
      op1 = solve(i + 1, j + 1, nk), op1.first++,
      op1.second = s1[i] + op1.second;
  }
  op2 = solve(i + 1, j, k);
  op3 = solve(i, j + 1, k);
  return dp[i][j][k] = max(op1, max(op2, op3));
}
int main() {
  cin >> s1 >> s2 >> v;
  pifunc();
  if (solve(0, 0, 0).first)
    cout << solve(0, 0, 0).second << endl;
  else
    cout << 0 << endl;
}
