#include <iostream>
#include <queue>
#include <cstdlib>
#include <string.h>
using namespace std;
typedef pair<int,int> pii;
struct ed{
int x;
int y;
int p;
ed(){}
ed(int a,int b,int c):x(a),y(b),p(c){}
};
int A[55][55][10100];
queue< ed > Q;
char v[55][55];
char ZZ[10100];
int L;
ed a;
int Cache[55][55][4];
int ddx[4] = {1,-1,0,0};
int ddy[4] = {0,0,1,-1};
void Push(int o){
if (Cache[a.x][a.y][o] == -1)
return;
int x ,y;
if (o < 2){
x = a.x;
y = Cache[a.x][a.y][o];
} else {
y = a.y;
x = Cache[a.x][a.y][o];
}
int p = a.p;
while (v[x][y] == ZZ[p]) p++;
if (A[x][y][p]) return;
if (p == L){
cout << A[a.x][a.y][a.p] + 1;
exit(0);
}
A[x][y][p] = A[a.x][a.y][a.p] + 1;
Q.push( ed(x,y,p));
}
int main(){
int N,M;
cin >> N >> M;
for (int i=1;i<=N;i++)
for (int j=1;j<=M;j++)
cin >> v[i][j];
for (int i=1;i<=N;i++){
int val = -1;
Cache[i][M][0] = -1;
for (int j=M-1;j>0;j--){
if (v[i][j] != v[i][j+1])
val = j+1;
Cache[i][j][0] = val;
}
}
for (int i=1;i<=N;i++){
int val = -1;
Cache[i][1][1] = -1;
for (int j=2;j<=M;j++){
if (v[i][j] != v[i][j-1])
val = j-1;
Cache[i][j][1] = val;
}
}
for (int i=1;i<=M;i++){
int val = -1;
Cache[N][i][2] = -1;
for (int j=N-1;j>0;j--){
if (v[j][i] != v[j+1][i])
val = j+1;
Cache[j][i][2] = val;
}
}
for (int i=1;i<=M;i++){
int val = -1;
Cache[1][i][3] = -1;
for (int j=2;j<=N;j++){
if (v[j][i] != v[j-1][i])
val = j-1;
Cache[j][i][3] = val;
}
}
cin >> ZZ;
L = strlen(ZZ);
ZZ[L] = '*';
ZZ[++L] = 0;
int p =0;
while (v[1][1] == ZZ[p]) p++;
Q.push ( ed(1,1,p) );
A[1][1][p] = L;
while ( true){
a = Q.front();
Q.pop();
Push(0);
Push(1);
Push(2);
Push(3);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8c3RyaW5nLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp0eXBlZGVmIHBhaXI8aW50LGludD4gcGlpOwogCnN0cnVjdCBlZHsKICAgaW50IHg7CiAgIGludCB5OwogICBpbnQgcDsKICAgZWQoKXt9CiAgIGVkKGludCBhLGludCBiLGludCBjKTp4KGEpLHkoYikscChjKXt9Cn07CiAKaW50IEFbNTVdWzU1XVsxMDEwMF07CnF1ZXVlPCBlZCA+IFE7CmNoYXIgdls1NV1bNTVdOwpjaGFyIFpaWzEwMTAwXTsKaW50IEw7CmVkIGE7CiAKaW50IENhY2hlWzU1XVs1NV1bNF07CmludCBkZHhbNF0gPSB7MSwtMSwwLDB9OwppbnQgZGR5WzRdID0gezAsMCwxLC0xfTsKIAogCnZvaWQgUHVzaChpbnQgbyl7CiAgICBpZiAoQ2FjaGVbYS54XVthLnldW29dID09IC0xKQogICAgICAgcmV0dXJuOwogICAgaW50IHggLHk7CiAgICBpZiAobyA8IDIpewogICAgICAgIHggPSBhLng7CiAgICAgICAgeSA9IENhY2hlW2EueF1bYS55XVtvXTsKICAgIH0gZWxzZSB7CiAgICAgICAgeSA9IGEueTsKICAgICAgICB4ID0gQ2FjaGVbYS54XVthLnldW29dOwogICAgfQogICAgaW50IHAgPSBhLnA7CiAgICB3aGlsZSAodlt4XVt5XSA9PSBaWltwXSkgcCsrOwogICAgaWYgKEFbeF1beV1bcF0pIHJldHVybjsKICAgIGlmIChwID09IEwpewogICAgICAgIGNvdXQgPDwgQVthLnhdW2EueV1bYS5wXSArIDE7CiAgICAgICAgZXhpdCgwKTsKICAgIH0KICAgIEFbeF1beV1bcF0gPSBBW2EueF1bYS55XVthLnBdICsgMTsKICAgIFEucHVzaCggZWQoeCx5LHApKTsKfQogCmludCBtYWluKCl7CiAgICBpbnQgTixNOwogICAgY2luID4+IE4gPj4gTTsKICAgIGZvciAoaW50IGk9MTtpPD1OO2krKykKICAgICAgICBmb3IgKGludCBqPTE7ajw9TTtqKyspCiAgICAgICAgICAgICAgICBjaW4gPj4gdltpXVtqXTsKIAogICAgZm9yIChpbnQgaT0xO2k8PU47aSsrKXsKICAgICAgICBpbnQgdmFsID0gLTE7CiAgICAgICAgQ2FjaGVbaV1bTV1bMF0gPSAtMTsKICAgICAgICBmb3IgKGludCBqPU0tMTtqPjA7ai0tKXsKICAgICAgICAgICAgaWYgKHZbaV1bal0gIT0gdltpXVtqKzFdKQogICAgICAgICAgICAgICAgdmFsID0gaisxOwogICAgICAgICAgICBDYWNoZVtpXVtqXVswXSA9IHZhbDsKICAgICAgICB9CiAgICB9CiAKICAgIGZvciAoaW50IGk9MTtpPD1OO2krKyl7CiAgICAgICAgaW50IHZhbCA9IC0xOwogICAgICAgIENhY2hlW2ldWzFdWzFdID0gLTE7CiAgICAgICAgZm9yIChpbnQgaj0yO2o8PU07aisrKXsKICAgICAgICAgICAgaWYgKHZbaV1bal0gIT0gdltpXVtqLTFdKQogICAgICAgICAgICAgICAgdmFsID0gai0xOwogICAgICAgICAgICBDYWNoZVtpXVtqXVsxXSA9IHZhbDsKICAgICAgICB9CiAgICB9CiAKICAgIGZvciAoaW50IGk9MTtpPD1NO2krKyl7CiAgICAgICAgaW50IHZhbCA9IC0xOwogICAgICAgIENhY2hlW05dW2ldWzJdID0gLTE7CiAgICAgICAgZm9yIChpbnQgaj1OLTE7aj4wO2otLSl7CiAgICAgICAgICAgIGlmICh2W2pdW2ldICE9IHZbaisxXVtpXSkKICAgICAgICAgICAgICAgIHZhbCA9IGorMTsKICAgICAgICAgICAgQ2FjaGVbal1baV1bMl0gPSB2YWw7CiAgICAgICAgfQogICAgfQogCiAgICBmb3IgKGludCBpPTE7aTw9TTtpKyspewogICAgICAgIGludCB2YWwgPSAtMTsKICAgICAgICBDYWNoZVsxXVtpXVszXSA9IC0xOwogICAgICAgIGZvciAoaW50IGo9MjtqPD1OO2orKyl7CiAgICAgICAgICAgIGlmICh2W2pdW2ldICE9IHZbai0xXVtpXSkKICAgICAgICAgICAgICAgIHZhbCA9IGotMTsKICAgICAgICAgICAgQ2FjaGVbal1baV1bM10gPSB2YWw7CiAgICAgICAgfQogICAgfQogCiAKICAgY2luID4+IFpaOwogICBMID0gc3RybGVuKFpaKTsKICAgWlpbTF0gPSAnKic7CiAgIFpaWysrTF0gPSAwOwogICBpbnQgcCA9MDsKICAgd2hpbGUgKHZbMV1bMV0gPT0gWlpbcF0pIHArKzsKICAgUS5wdXNoICggZWQoMSwxLHApICApOwogICBBWzFdWzFdW3BdID0gTDsKICAgd2hpbGUgKCB0cnVlKXsKICAgICAgICBhID0gUS5mcm9udCgpOwogICAgICAgIFEucG9wKCk7CiAgICAgICAgUHVzaCgwKTsKICAgICAgICBQdXNoKDEpOwogICAgICAgIFB1c2goMik7CiAgICAgICAgUHVzaCgzKTsKICAgfQp9