#include using namespace std; template struct Topk{ using S=long long; S inf=1e18; array a; array id; Topk(){ for (int i=0;i0&&a[i-1]=0&&(*this).id[i]!=id){ ret+=(*this).a[i]; cnt++; } } if (cnt; int main(){ using ll=long long; ll inf=1e18; int n,m; cin>>n>>m; vector>> g(n); for (int i=0;i>u>>v>>c; u--;v--; g[u].push_back({v,c}); } string s; cin>>s; vector dist(n,vector(5)); priority_queue> q; q.push({0,0,0,n}); string t="KCPC#"; while (!q.empty()){ auto [d,v,k,u]=q.top(); q.pop(); if (!dist[v][k].add(d,u)) continue; if (t[k]==s[v]&&u!=v){ int nu=u; if (k==1) nu=v; q.push({d,v,k+1,u}); } for (auto [w,c]:g[v]){ q.push({d-c,w,k,u}); } } ll ans=inf; for (int v=0;v