#include<bits/stdc++.h>
using namespace std;
int n,m,c1,c2,dd,i,j,bj[352][352],sx,sy,zx,zy,w,x,y,u,v,xx,yy,k,a[352][352],b[352][352];
int ans[352][352][17][17],ansmin=1.5e9,ansu,ansv;
int c[12]={0,1,-1,0,0,1,1,-1,-1};
int d[12]={0,0,0,1,-1,1,-1,1,-1};
vector<int>t[352];
char ch;
queue<int>q;
int main()
{
cin>>n>>m>>c1>>c2>>dd;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{ch=getchar();
while(ch!='S'&&ch!='T'&&ch!='.'&&(ch<48||ch>57))ch=getchar();
if(ch=='S')sx=i,sy=j;
else if(ch=='T')zx=i,zy=j;
else while(ch>=48&&ch<=57){a[i][j]=a[i][j]*10+ch-48;ch=getchar();}
if(a[i][j])t[a[i][j]].push_back(i*1000+j);
}
for(i=350;i>=1;i--)
for(j=0;j<t[i].size();j++)
{x=t[i][j]/1000,y=t[i][j]%1000;
if(bj[x][y]==0)
{bj[x][y]=1;b[x][y]=i;
for(k=1;k<=4;k++)
{xx=x+c[k],yy=y+d[k];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&bj[xx][yy]==0)
t[i-1].push_back(xx*1000+yy);
}
}
}
q.push(0*100000000+0*1000000+sx*1000+sy);
memset(ans,63,sizeof(ans));ans[sx][sy][0][0]=0;
while(q.size())
{w=q.front();u=w/100000000%10;v=w/1000000%10;x=w/1000%1000;y=w%1000;q.pop();
if(x==zx&&y==zy&&(ans[x][y][u][v]<ansmin||(ans[x][y][u] [v]==ansmin&&u+v<ansu+ansv)||(ans[x][y][u][v]==ansmin&&u+v==ansu+ansv&&u<ansu))){ansmin=ans[x][y][u][v];ansu=u;ansv=v;}
if(ans[x][y][u][v]<ansmin)
{for(i=1;i<=8;i++)
{xx=x+c[i],yy=y+d[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==0&&b[xx][yy]==0&&ans[xx][yy][u][v]>ans[x][y][u][v]+1)
{q.push(u*100000000+v*1000000+xx*1000+yy);ans[xx][yy][u][v]=ans[x][y][u][v]+1;}
}
if(u+1<=c1)
for(int i=1;i<=8;i++)
{xx=x+c[i],yy=y+d[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==0&&ans[xx][yy][u+1][v]>ans[x][y][u][v]+1)
{q.push((u+1)*100000000+v*1000000+xx*1000+yy);ans[xx][yy][u+1][v]=ans[x][y][u][v]+1;}
}
if(v+1<=c2)
for(int i=1;i<=4;i++)
{xx=x+c[i]*dd,yy=y+d[i]*dd;
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==0&&b[xx][yy]==0&&ans[xx][yy][u][v+1]>ans[x][y][u][v]+1)
{q.push(u*100000000+(v+1)*1000000+xx*1000+yy);ans[xx][yy][u][v+1]=ans[x][y][u][v]+1;}
}
if(u+1<=c1&&v+1<=c2)
for(int i=1;i<=4;i++)
{xx=x+c[i]*dd,yy=y+d[i]*dd;
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==0&&ans[xx][yy][u+1][v+1]>ans[x][y][u][v]+1)
{q.push((u+1)*100000000+(v+1)*1000000+xx*1000+yy);ans[xx][yy][u+1][v+1]=ans[x][y][u][v]+1;}
}
}
}
if(ansmin>10000000)cout<<-1;
else cout<<ansmin<<" "<<ansu<<" "<<ansv;
return 0;
}
```格式太难调了.....后面把他全部顶格算了,抱歉