import sys import bisect from collections import defaultdict def main(): input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) ptr += 1 intervals = defaultdict(list) for _ in range(N): l = int(data[ptr]) r = int(data[ptr+1]) a = int(data[ptr+2]) ptr += 3 intervals[a].append((l, r)) # Merge intervals for each m merged = {} for m in intervals: lst = intervals[m] if not lst: continue # Sort intervals by start lst.sort(key=lambda x: x[0]) res = [] for s, e in lst: if not res: res.append((s, e)) else: last_s, last_e = res[-1] if s <= last_e + 1: # Merge them new_s = last_s new_e = max(e, last_e) res[-1] = (new_s, new_e) else: res.append((s, e)) merged[m] = res Q = int(data[ptr]) ptr += 1 queries = list(map(int, data[ptr:ptr+Q])) def is_covered(m, x): if m not in merged: return False intervals = merged[m] # Binary search for x in intervals low = 0 high = len(intervals) - 1 while low <= high: mid = (low + high) // 2 s, e = intervals[mid] if s > x: high = mid - 1 elif e < x: low = mid + 1 else: return True return False for x in queries: mex = 0 while True: if mex not in merged: # x is not covered for this mex break if not is_covered(mex, x): break mex += 1 print(mex) if __name__ == "__main__": main()