#include <stdio.h>
#include <string.h>
#include <memory.h>
char s1[101], s2[101], v[101];
int m, n, l, K, L, AT[26][102], DT[110][110][110], D[110][110];
inline int max( int a, int b) { return a>b?a:b; }
inline void make_table()
{
    int i, j, k, kk;
    for( i = 0 ; i < l ; i++ ) AT[v[i]-'A'][i] = i+1;
    for( i = 1 ; i < l ; i++ )
    {
        for( j = 'A' ; j <= 'Z' ; j++ )
        {
            if( !AT[j-'A'][i] )
            {
                for( k = i-1 ; k >= 0 ; k-- )
                {
                    if( j == (int)v[k] )
                    {
                        for( kk = 1 ; kk <= k && v[i-kk] == v[k-kk] ; kk++ );
                        if( kk > k)
                        {
                            AT[j-'A'][i] = k+1;
                            break;
                        }
                    }
                }
            }
        }
    }
}
int solve(int a, int b, int c)
{
    if( c == l ) return DT[a][b][c] = -100;
    if( a == n || b == m ) return DT[a][b][c] = 0;
    if( DT[a][b][c] == - 1 )
    {
        DT[a][b][c] =  max( solve( a+1, b, c ), solve( a, b+1, c ) );
        if( s1[a] == s2[b] ) DT[a][b][c] = max( DT[a][b][c], solve( a+1, b+1, AT[s1[a]-'A'][c] ) + 1 );
    }
    return DT[a][b][c];
}
int lcs(int a, int b)
{
    if( a == n || b == m ) return D[a][b] = 0;
    if( D[a][b] == -1 )
    {
        if( s1[a] == s2[b] ) D[a][b] = lcs(a+1, b+1) + 1;
        else D[a][b] = max( lcs(a+1, b), lcs(a, b+1) );
    }
    return D[a][b];
}
void prt(int a, int b, int c)
{
    if( a == n || b == m ) return;
    if( DT[a+1][b][c] == DT[a][b][c] ) prt(a+1, b, c);
    else if( DT[a][b+1][c] == DT[a][b][c] ) prt(a, b+1, c);
    else
    {
        printf("%c", s1[a]);
        prt(a+1,b+1,AT[s1[a]-'A'][c]);
    }
}
int main()
{
    freopen(".20.in","r",stdin);
    freopen(".20.out","w",stdout);
    memset(DT, -1, sizeof(DT));
    memset(D, -1, sizeof(D));
    scanf("%s%s%d%s",s1,s2,&K,v);
    n = (int)strlen(s1), m = (int)strlen(s2), l = (int)strlen(v);
    make_table();
    if( (L = lcs(0,0)) < K ) printf("%d", L);
    else if( solve(0,0,0) ) prt(0,0,0), puts("");
    else puts("0");
}
