#include <bits/stdc++.h>
using namespace std;
string s1, s2, v;
int pi[110];
bool vis[110][110][110];
int dp[110][110][110], dir[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;
  }
}
int solve(int i, int j, int k) {
  if (i >= s1.size() || j >= s2.size()) return 0;
  if (vis[i][j][k]) return dp[i][j][k];
  vis[i][j][k] = 1;
  int op1 = 0, op2 = 0, op3 = 0, nk = 0;
  if (s1[i] == s2[j]) {
    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 = 1 + solve(i + 1, j + 1, nk);
  }
  op2 = solve(i + 1, j, k);
  op3 = solve(i, j + 1, k);
  if (op2 >= op1 && op2 >= op3)
    dp[i][j][k] = op2, dir[i][j][k] = 1;
  else if (op3 >= op1 && op3 >= op2)
    dp[i][j][k] = op3, dir[i][j][k] = 2;
  else
    dp[i][j][k] = op1, dir[i][j][k] = nk + 3;
  return dp[i][j][k];
}
void print(int i, int j, int k) {
  if (!dir[i][j][k]) {
    puts("");
    return;
  }
  if (dir[i][j][k] == 1)
    print(i + 1, j, k);
  else if (dir[i][j][k] == 2)
    print(i, j + 1, k);
  else {
    cout << s1[i];
    print(i + 1, j + 1, dir[i][j][k] - 3);
  }
}
int main() {
  cin >> s1 >> s2 >> v;
  pifunc();
  if (solve(0, 0, 0))
    print(0, 0, 0);
  else
    cout << 0 << endl;
}
