n, v, l = map(int, input().split()) if n == 0: if v >= l: print(0) else: print(-1) exit() stations = [tuple(map(int, input().split())) for _ in range(n)] prev_x = 0 current_dp = {v: 0} for x_i, v_i, w_i in stations: delta = x_i - prev_x new_dp = {} for fuel_prev, cost_prev in current_dp.items(): if fuel_prev < delta: continue fuel_after = fuel_prev - delta # Option 1: Do not use this station if fuel_after in new_dp: if cost_prev < new_dp[fuel_after]: new_dp[fuel_after] = cost_prev else: new_dp[fuel_after] = cost_prev # Option 2: Use this station max_add = min(v - fuel_after, v_i) new_fuel = fuel_after + max_add new_cost = cost_prev + w_i if new_fuel > v: new_fuel = v if new_fuel in new_dp: if new_cost < new_dp[new_fuel]: new_dp[new_fuel] = new_cost else: new_dp[new_fuel] = new_cost current_dp = new_dp prev_x = x_i if not current_dp: break # No way to proceed further delta_end = l - prev_x min_cost = float('inf') for fuel, cost in current_dp.items(): if fuel >= delta_end: if cost < min_cost: min_cost = cost print(min_cost if min_cost != float('inf') else -1)