import sys import math from collections import defaultdict def input(): return sys.stdin.read() def modinv(a, m): g, x, y = extended_gcd(a, m) if g != 1: return None # inverse doesn't exist else: return x % m def extended_gcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = extended_gcd(b % a, a) return (g, x - (b // a) * y, y) def main(): data = input().split() idx = 0 N = int(data[idx]) idx +=1 M = int(data[idx]) idx +=1 L = int(data[idx]) idx +=1 A = list(map(int, data[idx:idx+N])) idx += N d = math.gcd(N, L) L_prime = L // d N_prime = N // d try: inv_N_prime = modinv(N_prime, L_prime) except: print(0) return groups = defaultdict(list) for p in range(1, N+1): s = p % d m_p = (p - s) // d groups[s].append( (m_p, A[p-1]) ) max_sum = -float('inf') for s in groups: current_list = groups[s] # Iterate over all possible t in 0 to L_prime -1 for t in range(L_prime): total = 0 for (m_p, a_p) in current_list: c = t - m_p k0 = (c * inv_N_prime) % L_prime if k0 > M-1: cnt = 0 else: cnt = ( (M-1 - k0) // L_prime ) + 1 total += a_p * cnt if total > max_sum: max_sum = total print(max_sum) if __name__ == '__main__': main()