#include <bits/stdc++.h>
using namespace std;
string a, b, v;
int f[128], kk;
void build() {
  f[0] = 0;
  int l = 0;
  for (int i = 1; i < kk; ++i) {
    while (l && v[i] != v[l]) l = f[l - 1];
    if (v[i] == v[l]) ++l;
    f[i] = l;
  }
}
int get(int idx, char c) {
  while (idx && v[idx] != c) idx = f[idx - 1];
  return idx + (v[idx] == c);
}
int dp[101][101][101];
bool vis[101][101][101];
int calc(int i, int j, int k) {
  if (k == kk) return -(1 << 29);
  if (i == a.size() || j == b.size()) return 0;
  if (!vis[i][j][k]) {
    vis[i][j][k] = true;
    dp[i][j][k] = 0;
    if (a[i] == b[j])
      dp[i][j][k] =
          max(dp[i][j][k],
              1 + calc(i + 1, j + 1, a[i] == v[k] ? k + 1 : get(k, a[i])));
    dp[i][j][k] = max(dp[i][j][k], calc(i + 1, j, k));
    dp[i][j][k] = max(dp[i][j][k], calc(i, j + 1, k));
  }
  return dp[i][j][k];
}
void print(int i, int j, int k) {
  if (k == kk) return;
  if (i == a.size() || j == b.size()) return;
  if (a[i] == b[j] &&
      dp[i][j][k] ==
          1 + calc(i + 1, j + 1, a[i] == v[k] ? k + 1 : get(k, a[i]))) {
    printf("%c", a[i]);
    print(i + 1, j + 1, a[i] == v[k] ? k + 1 : get(k, a[i]));
    return;
  }
  if (dp[i][j][k] == calc(i + 1, j, k)) {
    print(i + 1, j, k);
    return;
  }
  if (dp[i][j][k] == calc(i, j + 1, k)) {
    print(i, j + 1, k);
    return;
  }
}
int main() {
  cin >> a >> b >> v;
  kk = v.size();
  build();
  int x = calc(0, 0, 0);
  if (x)
    print(0, 0, 0);
  else
    cout << 0;
  return 0;
}
