#!/usr/bin/env python3

import collections

class MinQueue:
    def __init__(self):
        self.q = collections.deque()
        self.offset = 0

    def add(self, val, idx):
        val += self.offset
        while len(self.q) > 0 and self.q[-1][0] >= val:
            self.q.pop()
        self.q.append((val, idx))

    def getMin(self, idx):
        while len(self.q) > 0 and self.q[0][1] < idx:
            self.q.popleft()
        return 1 << 60 if len(self.q) == 0 else self.q[0][0] - self.offset


n,m,k = map(int, input().split())
fs = [int(input()) for _ in range(n)]
MAXD = n + m + 1
counts = [0 for _ in range(MAXD)]
delta = [0 for _ in range(MAXD)]

for i in range(n):
    counts[i + m - 1] += fs[i]
    delta[i] += fs[i]
    delta[i + m] -= fs[i]

mq = MinQueue()
mq.add(delta[0],0)
for i in range(1,MAXD):
    delta[i] += delta[i-1]
    mq.add(delta[i], i)
    mq.offset += max(0, min(mq.getMin(i-m+1) - k, counts[i]))

print(sum(fs)-mq.offset)
