#include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <cstring>
using namespace std;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
struct state {
int x, y, hp, dist;
};
int main(){
int n,m,h;
cin>>n>>m>>h;
vector<string>v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
vector<vector<vector<int>>>vit(n,vector<vector<int>>(m,vector<int>(51)));
queue<state>q;
q.push({0,0,h,0});
while(!q.empty()){
auto it=q.front();
q.pop();
int x=it.x;
int y=it.y;
int hp=it.hp;
int dist=it.dist;
if(x==n-1&&y==m-1){
cout<<dist;
return 0;
}
for(int i=0;i<4;i++){
int xn=x+dx[i];
int yn=y+dy[i];
if(xn<0||xn>=n||yn<0||yn>=m)continue;
if(v[xn][yn]=='*')continue;
if(v[xn][yn]>='0'&&v[xn][yn]<='9'){
int hn=v[xn][yn]-'0';
if(hp<=hn)continue;
else{
if(vit[xn][yn][hp-hn]==0){
q.push({xn,yn,hp-hn,dist+1});
vit[xn][yn][hp-hn]=1;
}
}
}
if(v[xn][yn]=='.'){
if(vit[xn][yn][hp]==0){
q.push({xn,yn,hp,dist+1});
vit[xn][yn][hp]=1;
}
}
}
}
cout<<-1;
return 0;
}