#include #define rep(i,n) for(int i = 0; i < (n); ++i) #define rep1(i,n) for(int i = 1; i <= (n); ++i) #define drep(i,n) for(int i = (n)-1; i >= 0; --i) #define srep(i,s,t) for (int i = s; i < (t); ++i) #define rng(a) a.begin(),a.end() #define rrng(a) a.rbegin(),a.rend() #define fi first #define se second #define pb push_back #define eb emplace_back #define em emplace #define pob pop_back #define sz(x) (int)(x).size() #define pcnt __builtin_popcountll #define snuke srand((unsigned)clock()+(unsigned)time(NULL)); #define newline puts("") #define vc vector using namespace std; template using vv = vc>; template using PQ = priority_queue,greater>; using uint = unsigned; using ull = unsigned long long; using vi = vc; using vvi = vv; using vvvi = vv; using ll = long long; using vl = vc; using vvl = vv; using vvvl = vv; using P = pair; using vp = vc

; using vvp = vv

; int geti(){int x;scanf("%d",&x);return x;} vi pm(int n, int s=0) { vi a(n); iota(rng(a),s); return a;} templateistream& operator>>(istream&i,pair&v){return i>>v.fi>>v.se;} templateostream& operator<<(ostream&o,const pair&v){return o<istream& operator>>(istream&i,vc&v){rep(j,sz(v))i>>v[j];return i;} templatestring join(const T&v,const string& d=""){stringstream s;rep(i,sz(v))(i?s<ostream& operator<<(ostream&o,const vc&v){if(sz(v))o<void vin(vv& a){int n,m;cin>>n>>m;a=vv(n,vc(m));cin>>a;} templatevoid vin(vc& a){int n;cin>>n;a=vc(n);cin>>a;} templatevoid operator--(pair&a,int){a.fi--;a.se--;} templatevoid operator++(pair&a,int){a.fi++;a.se++;} templatevoid operator--(vc&a,int){for(T&x:a)x--;} templatevoid operator++(vc&a,int){for(T&x:a)x++;} templatevoid operator+=(vc&a,T b){for(T&x:a)x+=b;} templatevoid operator-=(vc&a,T b){for(T&x:a)x-=b;} templatevoid operator*=(vc&a,T b){for(T&x:a)x*=b;} templatevoid operator/=(vc&a,T b){for(T&x:a)x/=b;} templatevoid operator+=(vc&a,const vc&b){a.insert(a.end(),rng(b));} templatebool mins(T1& x,const T2&y){if(ybool maxs(T1& x,const T2&y){if(xT min(const vector& a){return *min_element(rng(a));} templateT max(const vector& a){return *max_element(rng(a));} templateTx dup(Tx x, Ty y){return (x+y-1)/y;} templatell suma(const vc&a){ll res(0);for(auto&&x:a)res+=x;return res;} templatell suma(const vv&a){ll res(0);for(auto&&x:a)res+=suma(x);return res;} templatevoid uni(T& a){sort(rng(a));a.erase(unique(rng(a)),a.end());} templatevoid prepend(vc&a,const T&x){a.insert(a.begin(),x);} const double eps = 1e-10; const ll LINF = 1001002003004005006ll; const int INF = 1001001001; #define dame { puts("-1"); return;} #define yes { puts("Yes"); return;} #define no { puts("No"); return;} #define rtn(x) { cout<<(x)<1){ll wj=(ac+wa)/2;(_f(wj)?ac:wa)=wj;}return ac;}()) struct edge { int to; int a, b; edge(int to=-1, int a=0, int b=0): to(to), a(a), b(b) {} operator int() const { return to;} }; using Gw = vv; Gw ingw(int n, int m=-1, bool bi=true) { if (m == -1) m = n-1; Gw g(n); rep(i,m) { int a, b; int c, d; cin >> a >> b >> c >> d; --a; --b; g[a].eb(b,c,d); if (bi) g[b].eb(a,c,d); } return g; } struct Solver { void solve() { int n,m; ll x; scanf("%d%d%lld",&n,&m,&x); auto g = ingw(n,m); auto f = [&](int s) { vl dist(n, LINF); PQ

q; q.em(0,0); dist[0] = 0; while (sz(q)) { auto [d,v] = q.top(); q.pop(); if (dist[v] != d) continue; for (auto e : g[v]) { if (e.b < s) continue; ll nd = d+e.a; if (dist[e] <= nd) continue; dist[e] = nd; q.em(nd,e); } } return dist[n-1] <= x; }; cout<