BFS
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
using namespace std;
#define LL long long
struct node
{
int x,y;
LL m;
};
bool vis[5001][5001];
int r,c;
LL m;
char map[5001][5001];
int px[510],py[510],pnum;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
inline void bfs(node v)
{
queue<node>q;
memset(vis,0,sizeof(vis));
vis[v.x][v.y]=1;
q.push(v);
node vn,vw;
while(!q.empty())
{
vn=q.front(),q.pop();
for(int i=0;i<4;i++)
{
int a=vn.x+dx[i];
int b=vn.y+dy[i];
if(a>=0&&a<r&&b>=0&&b<c&&!vis[a][b]&&map[a][b]!='#')
{
vw=vn;
vw.x=a,vw.y=b;
if(map[a][b]=='.')
{
vis[a][b]=1;
q.push(vw);
}
else if(map[a][b]=='*')
{
vis[a][b]=1;
vw.m+=m;
q.push(vw);
}
else if(map[a][b]=='C')
{
printf("%lld\n",vw.m);
return;
}
else if(map[a][b]=='P')
{
vis[a][b]=1;
for(int j=0;j<pnum;j++)
{
if(px[j]==a&&py[j]==b) continue;
if(!vis[px[j]][py[j]])
{
vw.x=px[j],vw.y=py[j];
vis[vw.x][vw.y]=1;
q.push(vw);
}
}
}
}
}
}
puts("Damn teoy!");
}
int main()
{
while(~scanf("%d%d%lld",&r,&c,&m))
{
node vs;
pnum=0;
for(int i=0;i<r;i++)
{
scanf("%s",map[i]);
for(int j=0;j<c;j++)
{
if(map[i][j]=='Y')
{
vs.x=i,vs.y=j;
}
if(map[i][j]=='P')
{
px[pnum]=i,py[pnum++]=j;
}
}
}
vs.m=0;
bfs(vs);
}
return 0;
}