use std::{cmp::Reverse, collections::BinaryHeap}; use proconio::{input, marker::Usize1}; fn main() { input!{ n: usize, m: usize, p: usize, y: usize, abc: [(Usize1,Usize1,usize);m], de: [(Usize1,usize);p], } let mut g = vec![vec![];n]; for (a,b,c) in abc{ g[a].push((b,c)); g[b].push((a,c)); } let mut cost = vec![1<<60;n]; let mut pq = BinaryHeap::new(); pq.push((Reverse(0),0)); while let Some((Reverse(c),v)) = pq.pop(){ if cost[v] != 1<<60{continue;} cost[v] = c; for &(nv,nc) in &g[v]{ pq.push((Reverse(c+nc),nv)) } } let mut h = vec![1<<60;n]; for (d,e) in de{ h[d] = e } println!("{}",(0..n).map(|i| (y.max(cost[i])-cost[i])/h[i]).max().unwrap()); }