import bisect def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]); idx +=1 M = int(data[idx]); idx +=1 X = int(data[idx]); idx +=1 C = list(map(int, data[idx:idx+N])) idx +=N positions = [[] for _ in range(6)] # 1-5 for i in range(1, N+1): c = C[i-1] positions[c].append(i) sum_Y = [0]*(N+2) # Y_sum[k] for k from 0 to N for _ in range(M): A_j = int(data[idx]); idx +=1 B_j = int(data[idx]); idx +=1 Yj = int(data[idx]); idx +=1 if B_j <1 or B_j>5: continue lst = positions[B_j] a = A_j # find the first index i >= a pos = bisect.bisect_left(lst, a) for i in lst[pos:]: k = i - a if k <= N: sum_Y[k] += Yj max_total = 0 for k in range(0, N+1): current = X * k + sum_Y[k] if current > max_total: max_total = current print(max_total) if __name__ == "__main__": main()