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 C = [0] + C # 1-based indexing sum_ = [[0]*(N+2) for _ in range(6)] # sum_[c][a] positions = [[] for _ in range(6)] # positions[c] for _ in range(M): A_j = int(data[idx]) idx += 1 B_j = int(data[idx]) idx += 1 Y_j = int(data[idx]) idx += 1 sum_[B_j][A_j] += Y_j for i in range(1, N+1): color = C[i] positions[color].append(i) max_total = 0 for K in range(0, N+1): current = X * K L = N - K for color in range(1, 6): lst = positions[color] idx_pos = bisect.bisect_left(lst, K+1) for pos in lst[idx_pos:]: a = pos - K if a > L: continue current += sum_[color][a] if current > max_total: max_total = current print(max_total) if __name__ == "__main__": main()