Link to this code: https://cses.fi/paste/1e894ecb0c8be480d4cccb/
from heapq import heappop, heappush


INF = 10 ** 20

# take input
n, min_length, max_length = map(int, input().split())
nums = [int(x) for x in input().split()]

# build prefix sums array
prefix_sums = []
prefix_sum = 0
for num in nums:
    prefix_sum += num
    prefix_sums.append(prefix_sum)
# print(prefix_sums)

heap = [(0, -1)]
max_subarray_sum = -INF

for right in range(n):
    left = right - min_length
    if left >= 0:
        heappush(heap, (prefix_sums[left], left))
    min_required_index = right - max_length
    while heap and heap[0][1] < min_required_index:
        heappop(heap)
    if right >= min_length - 1:
        right_prefix_sum = prefix_sums[right]
        left_prefix_sum = heap[0][0] if heap else 0
        cur_max_subarray_sum = right_prefix_sum - left_prefix_sum
        max_subarray_sum = max(max_subarray_sum, cur_max_subarray_sum)
        # print(right, left_prefix_sum, right_prefix_sum, cur_max_subarray_sum, heap)

print(max_subarray_sum)