import random
data = [random.randint(0, 300) for _ in range(100000)]

k = 3
cache = [(0, -1)] * (len(data) + 2*k + 1)
for i in range(len(data) - 1, -1, -1):
	maxSum, maxNext = max(map(lambda i: (cache[i][0], i), list(range(i + k, i + 2*k))), 
		key = lambda v: v[0])
	cache[i] = (maxSum + data[i], maxNext)

maxSum, maxStart = max(map(lambda i: (cache[i][0], i), list(range(0, k))), 
	key = lambda v: v[0])

print(maxSum)
maxList = []
now = maxStart
while True:
	maxList.append(now)
	next = cache[now][1]
	if next < 0:
		break
	now = next
	
print(maxList[0:50]) #иначе ругается на слишком длинный вывод