#include <bits/stdc++.h>
using namespace std;
class edge{
public:
int x,y,dir,c;
edge(int a, int b, int d){
x=a; y=b; c=d;
}
bool operator < (const edge &other) const{
return c > other.c;
}
};
int n,m;
string A;
char matrix[55][55];
vector <edge> adj[55][55];
int mark[55][55];
int xx,yy;
int movx[]={1,-1,0,0};
int movy[]={0,0,1,-1};
void BFS (int x,int y){
queue <edge> cola;
cola.push(edge(x,y,0));
memset(mark,-1,sizeof(mark));
while (!cola.empty()){
edge v = cola.front(); cola.pop();
if (mark[v.x][v.y]>0) continue;
adj[x][y].push_back(edge(v.x,v.y,v.c));
mark[v.x][v.y]=v.c;
for (int i=0;i<4;++i){
int aux= movx[i]+v.x;
int auy= movy[i]+v.y;
if (aux<0 || auy<0 || aux>=n || auy>=m || mark[aux][auy]>=0) continue;
if (matrix[aux][auy]==matrix[v.x][v.y]){
while (matrix[aux][auy]==matrix[v.x][v.y]){
int auxx= aux+movx[i];
int auyy= auy+movy[i];
if (auxx<0 || auyy<0 || auxx>=n || auyy>=m) break;
mark[aux][auy]=0;
aux=auxx;
auy=auyy;
}
}
if (matrix[v.x][v.y]!=matrix[aux][auy] && mark[aux][auy]<0)
mark[aux][auy]=0;
cola.push(edge(aux,auy,v.c+1));
}
}
}
int dijkstra (char B){
memset(mark,0x3f3f3f3f,sizeof(mark));
priority_queue <edge> cola; cola.push(edge(xx,yy,0));
while (!cola.empty()){
edge v = cola.top(); cola.pop();
if (matrix[v.x][v.y]==B){
xx=v.x; yy=v.y;
return v.c;
}
if (matrix[v.x][v.y]<v.c) continue;
for (int i=0;i<adj[v.x][v.y].size();++i){
int p = adj[v.x][v.y][i].x;
int q = adj[v.x][v.y][i].y;
int cc= adj[v.x][v.y][i].c + v.c;
if (cc >= mark[p][q]) continue;
mark[p][q]=cc;
cola.push(edge(p,q,cc));
}
}
}
int main(){
scanf("%d %d",&n,&m);
for (int i=0;i<n;++i)
scanf("%s",matrix[i]);
int cont=0;
cin>>A;
for (int i=0;i<n;++i){
for (int j=0;j<m;++j){
BFS(i,j);
}
}
A.push_back('*');
cont+=A.size();
xx=0; yy=0;
for (int i=0;i<A.size();++i){
cont+=dijkstra(A[i]);
}
printf("%d\n",cont);
return 0;
}
CgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNsYXNzIGVkZ2V7CglwdWJsaWM6CgkKCWludCB4LHksZGlyLGM7CgkKCWVkZ2UoaW50IGEsIGludCBiLCBpbnQgZCl7CgkJeD1hOyB5PWI7IGM9ZDsKCQkKCX0KCQoJYm9vbCBvcGVyYXRvciA8IChjb25zdCBlZGdlICZvdGhlcikgY29uc3R7CgkJCgkJcmV0dXJuIGMgPiBvdGhlci5jOwoJfQp9OyAKCmludCBuLG07CnN0cmluZyBBOwogCmNoYXIgbWF0cml4WzU1XVs1NV07CnZlY3RvciA8ZWRnZT4gYWRqWzU1XVs1NV07CgppbnQgbWFya1s1NV1bNTVdOwppbnQgeHgseXk7CmludCBtb3Z4W109ezEsLTEsMCwwfTsKaW50IG1vdnlbXT17MCwwLDEsLTF9OyAgCgp2b2lkIEJGUyAoaW50IHgsaW50IHkpewoJCglxdWV1ZSA8ZWRnZT4gY29sYTsKCQoJY29sYS5wdXNoKGVkZ2UoeCx5LDApKTsKCW1lbXNldChtYXJrLC0xLHNpemVvZihtYXJrKSk7Cgl3aGlsZSAoIWNvbGEuZW1wdHkoKSl7CgkJZWRnZSB2ID0gY29sYS5mcm9udCgpOyBjb2xhLnBvcCgpOwoJCQoJCWlmIChtYXJrW3YueF1bdi55XT4wKSBjb250aW51ZTsKCQlhZGpbeF1beV0ucHVzaF9iYWNrKGVkZ2Uodi54LHYueSx2LmMpKTsKCQltYXJrW3YueF1bdi55XT12LmM7CgkJZm9yIChpbnQgaT0wO2k8NDsrK2kpewoJCQlpbnQgYXV4PSBtb3Z4W2ldK3YueDsKCQkJaW50IGF1eT0gbW92eVtpXSt2Lnk7CgkJCQoJCQlpZiAoYXV4PDAgfHwgYXV5PDAgfHwgYXV4Pj1uIHx8IGF1eT49bSB8fCBtYXJrW2F1eF1bYXV5XT49MCkgY29udGludWU7CgkJCQoJCQlpZiAobWF0cml4W2F1eF1bYXV5XT09bWF0cml4W3YueF1bdi55XSl7CgkJCQl3aGlsZSAobWF0cml4W2F1eF1bYXV5XT09bWF0cml4W3YueF1bdi55XSl7CgkJCQkJaW50IGF1eHg9IGF1eCttb3Z4W2ldOwoJCQkJCWludCBhdXl5PSBhdXkrbW92eVtpXTsKCQkJCQkKCQkJCQlpZiAoYXV4eDwwIHx8IGF1eXk8MCB8fCBhdXh4Pj1uIHx8IGF1eXk+PW0pIGJyZWFrOwoJCQkJCW1hcmtbYXV4XVthdXldPTA7CgkJCQkJYXV4PWF1eHg7CgkJCQkJYXV5PWF1eXk7CgkJCQl9CgkJCX0KCQkJaWYgKG1hdHJpeFt2LnhdW3YueV0hPW1hdHJpeFthdXhdW2F1eV0gJiYgbWFya1thdXhdW2F1eV08MCkKCQkJbWFya1thdXhdW2F1eV09MDsKCQkJY29sYS5wdXNoKGVkZ2UoYXV4LGF1eSx2LmMrMSkpOwoJCX0KCX0KCQp9CgppbnQgZGlqa3N0cmEgKGNoYXIgQil7CgkKCW1lbXNldChtYXJrLDB4M2YzZjNmM2Ysc2l6ZW9mKG1hcmspKTsKCQoJcHJpb3JpdHlfcXVldWUgPGVkZ2U+IGNvbGE7IGNvbGEucHVzaChlZGdlKHh4LHl5LDApKTsKCQoJd2hpbGUgKCFjb2xhLmVtcHR5KCkpewoJCWVkZ2UgdiA9IGNvbGEudG9wKCk7IGNvbGEucG9wKCk7CgkJCgkJaWYgKG1hdHJpeFt2LnhdW3YueV09PUIpewoJCQl4eD12Lng7IHl5PXYueTsKCQkJcmV0dXJuIHYuYzsKCQl9CgkJCgkJaWYgKG1hdHJpeFt2LnhdW3YueV08di5jKSBjb250aW51ZTsKCQkKCQlmb3IgKGludCBpPTA7aTxhZGpbdi54XVt2LnldLnNpemUoKTsrK2kpewoJCQlpbnQgcCA9IGFkalt2LnhdW3YueV1baV0ueDsKCQkJaW50IHEgPSBhZGpbdi54XVt2LnldW2ldLnk7CgkJCWludCBjYz0gYWRqW3YueF1bdi55XVtpXS5jICsgdi5jOwoJCQkKCQkJaWYgKGNjID49IG1hcmtbcF1bcV0pIGNvbnRpbnVlOwoJCQltYXJrW3BdW3FdPWNjOwoJCQljb2xhLnB1c2goZWRnZShwLHEsY2MpKTsKCQl9Cgl9Cn0KIAppbnQgbWFpbigpewogCiAKICAgICAgICBzY2FuZigiJWQgJWQiLCZuLCZtKTsKIAogICAgICAgIGZvciAoaW50IGk9MDtpPG47KytpKQogICAgICAgICAgICAgICAgc2NhbmYoIiVzIixtYXRyaXhbaV0pOwogCiAgICAgICAgCiAgICAgICAgaW50IGNvbnQ9MDsKICAgICAgICBjaW4+PkE7CgkJCWZvciAoaW50IGk9MDtpPG47KytpKXsKCQkJCWZvciAoaW50IGo9MDtqPG07KytqKXsKCQkJCQkKCQkJCQlCRlMoaSxqKTsKCQkJCX0KCQkJfQoJCQogICAgICAgIEEucHVzaF9iYWNrKCcqJyk7CiAgICAgICAgY29udCs9QS5zaXplKCk7CiAgICAgICAgCiAgICAgICAgeHg9MDsgeXk9MDsKICAgICAgICBmb3IgKGludCBpPTA7aTxBLnNpemUoKTsrK2kpewoJCQljb250Kz1kaWprc3RyYShBW2ldKTsKCQl9CiAgICAgCiAgICAgICAgCiAgICAgICAgcHJpbnRmKCIlZFxuIixjb250KTsKICAgICAgICByZXR1cm4gMDsKfQ==