const INF: isize = 1isize << 60; fn main() { let mut nk = String::new(); std::io::stdin().read_line(&mut nk).ok(); let nk: Vec = nk.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nk[0]; let k = nk[1]; let mut avals = Vec::with_capacity(n); let mut bs = Vec::with_capacity(n); for i in 0..n { let mut am = String::new(); std::io::stdin().read_line(&mut am).ok(); let am: Vec = am.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let a = am[0]; let mut b = String::new(); std::io::stdin().read_line(&mut b).ok(); let b: Vec = b.trim().split_whitespace().map(|s| s.parse::().unwrap()-1).collect(); avals.push(a); bs.push(b); } let mut paths = vec![vec![]; n]; for u in 0..n { for &v in bs[u].iter() { paths[v].push((u, avals[v] - avals[u])); } if u+1 < n { paths[u].push((u+1, 0)); } } let mut result = vec![INF; n]; result[0] = 0; for u in 0..n { for &(v, cost) in paths[u].iter() { if v <= u { continue; } result[v] = result[v].min(result[u] + cost); } } println!("{}", -result[n-1]); }