import bisect def main(): import sys input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) K = int(data[ptr+1]) Q = int(data[ptr+2]) ptr += 3 operations = [] for _ in range(K): L = int(data[ptr]) R = int(data[ptr+1]) C = int(data[ptr+2]) H = int(data[ptr+3]) operations.append((L, R, C, H)) ptr += 4 queries = [] for _ in range(Q): I = int(data[ptr]) X = int(data[ptr+1]) queries.append((I, X)) ptr += 2 # Line sweep to collect operations for each section events = [] for k in range(K): L, R, C, H = operations[k] events.append((L, 'start', k)) events.append((R + 1, 'end', k)) events.sort() current_ops = set() section_ops = [[] for _ in range(N + 1)] # 1-based indexing event_ptr = 0 for i in range(1, N + 1): while event_ptr < len(events) and events[event_ptr][0] <= i: pos, typ, k = events[event_ptr] if typ == 'start': current_ops.add(k) else: if k in current_ops: current_ops.remove(k) event_ptr += 1 # Convert current_ops to a sorted list by k sorted_ops = sorted(current_ops) section_ops[i] = sorted_ops # Precompute prefix sums and colors for each section prefix_sums = [[] for _ in range(N + 1)] colors = [[] for _ in range(N + 1)] for i in range(1, N + 1): sum_h = 0 for k in section_ops[i]: sum_h += operations[k][3] prefix_sums[i].append(sum_h) colors[i].append(operations[k][2]) # Process queries for I, X in queries: T = X - 0.5 ops = section_ops[I] if not ops: print(-1) continue sum_list = prefix_sums[I] idx = bisect.bisect_left(sum_list, T) if idx < len(sum_list): print(colors[I][idx]) else: print(-1) if __name__ == '__main__': main()