#include <bits/stdc++.h>
using namespace std;
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define of(a,b,c) for(int a=b;a>=c;a--)
const int N=360;
int n,m,c1,c2,d;
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,-1,1,-1,0,1};
string a[N][N];
bool mp[N][N],vis[N][N];
struct Node{
int x,y;
int time;
} u;
queue<Node> Q;
inline int read(){
int s=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*f;
}
signed main(){
n=read();
m=read();
c1=read();
c2=read();
d=read();
fo(i,1,n){
fo(j,1,m){
mp[i][j]=1;
vis[i][j]=1;
}
}
int sx=0,sy=0;
int ex=0,ey=0;
fo(i,1,n){
fo(j,1,m){
cin>>a[i][j];
}
}
if(c1==0&&c2==0){
fo(i,1,n){
fo(j,1,m){
char ch=a[i][j][0];
if(ch=='S'){
sx=i;
sy=j;
}
else if(ch=='T'){
ex=i;
ey=j;
}
if(!(ch>='0'&&ch<='9')) continue;
int len=a[i][j].size();
a[i][j]=' '+a[i][j];
int cnt=0;
fo(k,1,len){
int num=a[i][j][k]-'0';
cnt=cnt*10+num;
}
fo(k,1,n){
fo(l,1,m){
int dis=abs(k-i);
dis+=abs(l-j);
if(dis<cnt){
mp[i][j]=0;
}
}
}
}
}
vis[sx][sy]=0;
Q.push((Node){sx,sy,0});
while(!Q.empty()){
u=Q.front();
Q.pop();
if(u.x==ex&&u.y==ey){
cout<<u.time;
cout<<" 0 0"<<endl;
return 0;
}
fo(i,0,7){
int nx=u.x+dx[i];
int ny=u.y+dy[i];
if(nx<1||nx>n) continue;
if(ny<1||ny>m) continue;
if(!mp[nx][ny]) continue;
if(!vis[nx][ny]) continue;
vis[nx][ny]=0;
Q.push((Node){nx,ny,u.time+1});
}
}
cout<<-1<<endl;
return 0;
}
cout<<-1<<endl;
return 0;
}