wa#1,5,8,9,过了样例
#include<bits/stdc++.h>
using namespace std;
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define mkp make_pair
typedef pair<int,int> pii;
namespace bfs
{
constexpr int MAX=50;
int n,m,t;
int mp[MAX][MAX],dis[MAX][MAX][MAX][MAX],vis[MAX][MAX];//dis->从x到达y的最小权值
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
bool check(int a,int b)
{
return a>=1&&a<=n&&b>=1&&b<=m;
}
void bfs(int x,int y)
{
memset(vis,0,sizeof(vis));
queue<pii>q;
dis[x][y][x][y]=mp[x][y];
q.push(mkp(x,y));
while(!q.empty())
{
int x1=q.front().first,y1=q.front().second;
q.pop();
if(vis[x1][y1])
continue;
vis[x1][y1]=1;
// auto check=[](int a,int b){return a>=1&&a<=n&&b>=1&&b<=m;};
fo(i,0,3)
{
int x2=x1+dx[i],y2=y1+dy[i];
if(!check(x2,y2))
continue;
// cout<<x2<<' '<<y2<<endl;
q.push(mkp(x2,y2));
dis[x][y][x2][y2]=min(dis[x][y][x2][y2],dis[x][y][x1][y1]+mp[x2][y2]);
}
}
// cout<<"x"<<x<<' '<<"y"<<y<<endl;
}
void main()
{
cin>>n>>m>>t;
fo(i,1,n)
{
fo(j,1,m)
{
char ipt;
cin>>ipt;
mp[i][j]=ipt-'0';
}
}
memset(dis,0x3f,sizeof(dis));
fo(i,1,n)
{
fo(j,1,m)
{
bfs(i,j);
}
}
double ans=0;
fo(i,1,n)
{
fo(j,1,m)
{
fo(k,1,n)
{
fo(l,1,m)
{
// cout<<"i:"<<i<<"j:"<<j<<"k:"<<k<<"l:"<<l<<"dis:"<<dis[i][j][k][l]<<endl;
if(dis[i][j][k][l]<=t)
ans=max(ans,1.0*(i-k)*(i-k)+(j-l)*(j-l));
// ans;
}
}
}
}
printf("%.6f",sqrt(ans));
}
}
int main()
{
bfs::main();
return 0;
}