#include using namespace std; long long INF=1e18; struct S{ array,6>data={{{INF,-1},{INF,-1},{INF,-1},{INF,-1},{INF,-1},{INF,-1}}}; }; int main(void){ int n,m; cin>>n>>m; vector>v[100000]; for(int i=0;i>a>>b>>c; v[a-1].push_back({b-1,c}); } string s; cin>>s; vectorvis(n); priority_queue>pq; if(s[0]=='K'){ pq.push({0,0,1,-1}); vis[0].data[1][0]=0; }else{ pq.push({0,0,0,-1}); vis[0].data[0][0]=0; } long long ans=INF; while(!pq.empty()){ long long val=-pq.top()[0],now=pq.top()[1],cond=pq.top()[2],cd=pq.top()[3]; //cout<v2+val){ vis[nx].data[1][0]=v2+val; pq.push({-(v2+val),nx,1,-1}); } }else if(cond==1&&s[nx]=='C'){ if(vis[nx].data[2][0]>v2+val){ if(vis[nx].data[2][1]==nx){ vis[nx].data[2][0]=v2+val; pq.push({-(v2+val),nx,2,nx}); }else{ swap(vis[nx].data[2],vis[nx].data[3]); vis[nx].data[2][0]=v2+val; vis[nx].data[2][1]=nx; pq.push({-(v2+val),nx,2,nx}); } }else if(vis[nx].data[2][1]!=nx&&vis[nx].data[3][0]>v2+val){ vis[nx].data[3][0]=v2+val; vis[nx].data[3][1]=nx; pq.push({-(v2+val),nx,2,nx}); } }else if(cond==2&&s[nx]=='P'){ if(vis[nx].data[4][0]>v2+val){ if(vis[nx].data[4][1]==cd){ vis[nx].data[4][0]=v2+val; pq.push({-(v2+val),nx,3,cd}); }else{ swap(vis[nx].data[4],vis[nx].data[5]); vis[nx].data[4][0]=v2+val; vis[nx].data[4][1]=cd; pq.push({-(v2+val),nx,3,cd}); } }else if(vis[nx].data[4][1]!=cd&&vis[nx].data[5][0]>v2+val){ vis[nx].data[5][0]=v2+val; vis[nx].data[5][1]=cd; pq.push({-(v2+val),nx,3,cd}); } }else if(cond==3&&s[nx]=='C'&&nx!=cd){ ans=min(ans,v2+val); }else if(cond==0){ if(vis[nx].data[0][0]>v2+val){ vis[nx].data[0][0]=v2+val; pq.push({-(v2+val),nx,0,-1}); } }else if(cond==1){ if(vis[nx].data[1][0]>v2+val){ vis[nx].data[1][0]=v2+val; pq.push({-(v2+val),nx,1,-1}); } }else if(cond==2){ if(vis[nx].data[2][0]>v2+val){ if(vis[nx].data[2][1]==cd){ vis[nx].data[2][0]=v2+val; pq.push({-(v2+val),nx,2,cd}); }else{ swap(vis[nx].data[2],vis[nx].data[3]); //cout<<"~"; vis[nx].data[2][0]=v2+val; vis[nx].data[2][1]=cd; pq.push({-(v2+val),nx,2,cd}); } }else if(vis[nx].data[2][1]!=cd&&vis[nx].data[3][0]>v2+val){ vis[nx].data[3][0]=v2+val; vis[nx].data[3][1]=cd; pq.push({-(v2+val),nx,2,cd}); } //cout<<"^"; }else if(cond==3){ if(vis[nx].data[4][0]>v2+val){ if(vis[nx].data[4][1]==cd){ vis[nx].data[4][0]=v2+val; pq.push({-(v2+val),nx,3,cd}); }else{ swap(vis[nx].data[4],vis[nx].data[5]); vis[nx].data[4][0]=v2+val; vis[nx].data[4][1]=cd; pq.push({-(v2+val),nx,3,cd}); } }else if(vis[nx].data[4][1]!=cd&&vis[nx].data[5][0]>v2+val){ vis[nx].data[5][0]=v2+val; vis[nx].data[5][1]=cd; pq.push({-(v2+val),nx,3,cd}); } } } //cout<