#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define syosu(x) fixed< P; typedef pair pdd; typedef pair pll; typedef vector vi; typedef vector vvi; typedef vector vd; typedef vector vvd; typedef vector vl; typedef vector vvl; typedef vector vc; typedef vector vvc; typedef vector vs; typedef vector vb; typedef vector vvb; typedef vector

vp; typedef vector vvp; typedef vector vpll; typedef pair pip; typedef vector vip; const int inf=1<<29; const ll INF=1ll<<52; const double pi=acos(-1); const double eps=1e-8; const ll mod=1e9+7; const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,-0}; const int DX[8]={-1,-1,-1,0,1,1,1,0},DY[8]={1,0,-1,-1,-1,0,1,1}; const int e=101; class Graph{ private: int V; vvp List; public: Graph(int v){ V=v; List=vvp(v); } void add_edge(int s,int t,int c){ List[s].push_back(P(t,c)); } int DIJ(int s,int t){ priority_queue

que; vi d(V,inf); d[s]=0; que.push(P(0,s)); while(!que.empty()){ P p=que.top(); que.pop(); int v=p.second; if(d[v]<-p.first) continue; for(int i=0;id[v]+S){ d[F]=d[v]+S; que.push(P(-d[F],F)); } } } return d[t]; } }; int gx,gy,n,f; int main(){ cin>>gx>>gy>>n>>f; Graph g(e*e); for(int i=0;i>x>>y>>c; for(int j=0;j=0&&cx=0&&cy<=e) g.add_edge(j*e+k,cx*e+cy,c); } } for(int i=0;i