class Fenwick_Tree: def __init__(self, N, A=None): self.N=N if A==None: self.data=[0]*N else: assert len(A)==N self.data=A self.__build() def __build(self): data=self.data for i in range(1, self.N+1): if i+(i&(-i))<=self.N: data[i+(i&(-i))-1]+=data[i-1] def add(self, i, x): i+=1 data=self.data while i<=self.N: data[i-1]+=x i+=i&(-i) def sum(self, i): S=0 data=self.data while i: S+=data[i-1] i-=i&(-i) return S def range_sum(self,l,r): return self.sum(r)-self.sum(l) def bisect_left(self, x, default=-1): i=0 k=1<>=1 return i if x else default def bisect_right(self, x, default=-1): i=0 k=1<>=1 return i if i=0: return self.Fenwick.bisect_left(self.Fenwick.sum(x), default) else: return default def next(self, x, mode=True, default=-1): """ S に含まれる x 以上の要素のうち, 最大値を求める. x: int mode: False のときは "以上" が "より大きい" になる. """ if not mode: x+=1 return self.Fenwick.bisect_right(self.Fenwick.sum(x), default) def less_count(self, x, mode=False): """ x 未満の元の個数を求める. x: int mode: mode=True ならば, "未満" が "以下" になる. """ if mode: x+=1 return self.Fenwick.sum(x) def more_count(self, x, mode=False): """ x より大きい元の個数を求める. x: int mode: mode=True ならば, "より大きい" が "以上" になる. """ return len(self)-self.less_count(x, not mode) def kth_min(self, k, default=-1): """ k 番目に小さい元を求める. """ if 1<=k<=len(self): return self[k-1] else: return default def kth_max(self, k, default=-1): """ k 番目に大きい元を求める. """ if 1<=k<=len(self): return self[~(k-1)] else: return default #================================================== import sys input=sys.stdin.readline write=sys.stdout.write N,K,Q=map(int,input().split()) C=[0]*K D=[[] for _ in range(N+2)] for k in range(K): L,R,C[k],M=map(int,input().split()) D[L].append((k,M)) D[R+1].append((k,-M)) Quest=[[] for _ in range(N+2)] for q in range(Q): I,X=map(int,input().split()) Quest[I].append((q,X)) Ans=[0]*Q S=Ordered_Set(K,True) for n in range(1,N+1): for k,h in D[n]: S.add(k,h) for q,x in Quest[n]: if x<=len(S): Ans[q]=C[S[x-1]] else: Ans[q]=-1 write("\n".join(map(str,Ans)))