import bisect from collections import defaultdict def main(): import sys input = sys.stdin.read().split() ptr = 0 n = int(input[ptr]) ptr += 1 merged = defaultdict(list) for _ in range(n): l = int(input[ptr]) r = int(input[ptr+1]) a = int(input[ptr+2]) ptr += 3 if a < 0: continue merged[a].append((l, r)) merged_intervals = {} for m in merged: intervals = merged[m] if not intervals: continue intervals.sort() merged_list = [] current_start, current_end = intervals[0] for l, r in intervals[1:]: if l <= current_end: current_end = max(current_end, r) else: merged_list.append((current_start, current_end)) current_start, current_end = l, r merged_list.append((current_start, current_end)) merged_intervals[m] = merged_list max_m = max(merged_intervals.keys()) if merged_intervals else -1 q = int(input[ptr]) ptr += 1 xs = list(map(int, input[ptr:ptr+q])) ptr += q for x in xs: m = 0 while True: if m > max_m: print(m) break if m not in merged_intervals: print(m) break intervals = merged_intervals[m] first_l, first_r = intervals[0][0], intervals[0][1] last_l, last_r = intervals[-1][0], intervals[-1][1] if x < first_l or x > last_r: print(m) break lefts = [interval[0] for interval in intervals] pos = bisect.bisect_right(lefts, x) - 1 if pos >= 0: l, r = intervals[pos] if l <= x <= r: m += 1 else: print(m) break else: print(m) break if __name__ == "__main__": main()