wgraph>g; ll@n,@m,@x; int u[m],v[]; pairab[]; rep(i,m){ rd(u[i]--,v[i]--,ab[i].first,ab[i].second); } g.setEdge(n,m,u,v,ab); DijkstraHeaph; h.malloc(n); ll ok=-1,ng=1d9+1; while(ok+1>1; h.init(n); h.change(0,0); while(h.size){ ll i=h.pop(); rep(j,g.es[i]){ if(g.cost[i][j].second>=z){ h.change(g.edge[i][j],h.val[i]+g.cost[i][j].first); } } } if(h.visited[n-1]&&h.val[n-1]<=x){ ok=z; }else{ ng=z; } } wt(ok);