다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 인덱스에 해당하는 수가 연속해서 K번을 초과해서 더해질 수 없다.
그리디 문제들을 접하면서, 느낄 수 있는 점은 큰 수를 통한 공략이 빠른 해결점이라는 것이다.
그리하여, 주어진 리스트를 통해 가장 큰 값을 출력해야하는 이번 문제 같은 경우에서는 최대한 많이 최대 값을 더하는 것이 중점이라 생각이 들었다.
이에 따라, 최대 값과 2번째로 큰 값을 별도로 저장하여, K번만큼 최대 값을 더 한후 두번쨰로 큰 값을 한번 더하여 연속된 최대 값의 사용을 끊어주는 역할을 하였다.
n, m, k = map(int, input().split())
data = list(map(int, input().split()))
result = 0
first = data[n-1]
second = data[n-2]
while True:
for i in range(k):
if m == 0:
break
result += first
m -= 1
if m == 0 :
break
result += second
m -= 1
print(result)