const INF: isize = 1isize << 60; fn main() { let mut nma = String::new(); std::io::stdin().read_line(&mut nma).ok(); let nma: Vec = nma.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nma[0]; let m = nma[1]; let a = nma[2] as isize; let mut areas = (0..m).map(|_| { let mut temp = String::new(); std::io::stdin().read_line(&mut temp).ok(); let temp: Vec = temp.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); (temp[0]-1, temp[1], temp[2] as isize) }) .collect::>(); areas.sort(); let mut idx = 0usize; let mut dp = vec![vec![-INF; 2]; n+1]; for i in 0..=n { dp[0][0] = 0; } dp[0][1] = 0; for &(l, r, p) in areas.iter() { while idx < l { dp[idx+1][0] = dp[idx+1][0].max(dp[idx][0]).max(dp[idx][1]); idx += 1; } let minusa = if r == n { 0 } else { -a }; dp[r][1] = dp[r][1].max(dp[l][0] - a + p + minusa).max(dp[l][1] + p + minusa); } while idx < n { dp[idx+1][0] = dp[idx+1][0].max(dp[idx][0]).max(dp[idx][1]); idx += 1; } println!("{}", dp[n].iter().max().unwrap()); }