/* #include void self::main(){ LL(N,M,T); VV(M,u,v,a,b);dec(u,v); pp(binary_search_last_true(-1,1e9+1,[&](ll X){ Graphg(N); fo(i,M){ if(X<=b[i]){ g.add_edge(u[i],v[i],a[i]); } } return g.dijkstra_dist_enumerate(0)[N-1]<=T; })); } */ #include using namespace std; namespace self{void main();void sub();templatevoid pp(const auto&...a);void epp(const auto&...a);} int main(){cin.tie(nullptr)->sync_with_stdio(0);cout<__VA_ARGS__;fe(refs(__VA_ARGS__),e)e.get().resizes(n);vin(__VA_ARGS__) #define VV(n,...) RDVV(ll,n,__VA_ARGS__) #define fo(i,...) for(auto[i,i##stop,i##step]=for_range(0,__VA_ARGS__);iconstexpr auto for_range(T s,T b){T a=0;if(s)swap(a,b);return array{a-s,b,1-s*2};} void lin(auto&...a){(cin>>...>>a);} void vin(auto&...a){fo(i,(a.size()&...))(cin>>...>>a[i]);} constexpr ll size10(auto x){x|=1;ll r=0;while(x>0)x/=10,++r;return r;} templateconstexpr ll maxsize10(){return size10(numeric_limits::max());} bool amin(auto&a,const auto&b){return bstruct pair{ A a;B b; pair()=default; pair(A a,B b):a(a),b(b){} auto operator<=>(const pair&)const=default; }; templatestruct infinity{ templatestatic constexpr T ones(size_t n){return n?ones(n-1)*10+1:0;} templateconstexpr operator T()const{return ones(maxsize10())*(1-is_negative*2);} }; constexpr infinity oo; void dec(auto&...a){((--a),...);} templateusing pack_back_t=tuple_element_t>; } namespace self{ templateconstexpr int depth=0; templatestruct core_t_helper{using type=T;}; templateusing core_t=core_t_helper::type; templatestruct vec; templatestruct hvec_helper{using type=vec::type>;}; templatestruct hvec_helper<0,T>{using type=T;}; templateusing hvec=hvec_helper::type; templatestruct vec:vector{ static constexpr int D=depth+1; using C=core_t; using vector::vector; void resizes(const auto&...a){if constexpr(sizeof...(a)==D)*this=make(a...,C{});else{ }} static auto make(ll n,const auto&...a){ if constexpr(sizeof...(a)==1)return vec(n,array{a...}[0]); else { } } vec&operator--(){fe(*this,e)--e;return*this;} ll size()const{return vector::size();} auto&emplace_back(auto&&...a){vector::emplace_back(std::forward(a)...);return*this;} }; templaterequires(sizeof...(A)>=2)vec(const A&...a)->vec>>; } namespace self{ templatestruct priority_queue:std::priority_queue,F>{ priority_queue()=default; priority_queue(const initializer_list&a){fe(a,e)this->emplace(e);} ll size()const{return std::priority_queue,F>::size();} T pop(){T r=this->top();std::priority_queue,F>::pop();return r;} }; templateusing min_heap=priority_queue>; } namespace self{ templatestruct edge{ int from,to; WT wt; int id; edge()=default; edge(int from,int to,WT wt=1,int id=-1):from(from),to(to),wt(wt),id(id){} auto operator<=>(const edge&e)const{return wt<=>e.wt;} }; } namespace self{ templateclass Graph{ public: ll n_; vec>>edges_; Graph()=default; Graph(ll n):n_(n),edges_(n){} void add_edge(ll a,auto&&...b){edges_[a].eb(a,std::forward(b)...);} auto dijkstra_dist_enumerate(int s)const{ vecdist(n_,oo); dist[s]=WT{}; vecused(n_); min_heap>>q{{WT{},{-1,s,WT{},-1}}}; while(q.size()){ auto[du,pu]=q.pop(); auto u=pu.to; if(dist[u]=WT{}); assert(!used[e.to]); q.emplace(dist[e.to],e); } } } return dist; } }; } templatevoid self::pp(const auto&...a){const char*c="";((o<g(N); fo(i,M){ if(X<=b[i]){ g.add_edge(u[i],v[i],a[i]); } } return g.dijkstra_dist_enumerate(0)[N-1]<=T; })); }