#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' ', StringSplitOptions.RemoveEmptyEntries), 0); return T.Parse(_input[_iter++], null); } #endregion var n = I(); var b = Math.Min(I(), 3); var c = I(); var sz = new long[n + 1]; for (var i = 0; i < n; i++) sz[i + 1] = sz[i] + I(); var dp = new long[n + 1]; dp.AsSpan().Fill(long.MinValue / 8); dp[c - 2] = sz[c - 2]; dp[c - 1] = sz[c - 1]; for (var i = c - 2; i < n; i++) { var v = dp[i]; if (v < 0) continue; for (var x = c - 2; x < c; x++) for (var y = 1; y < b; y++) { if (i + y >= n) continue; var j = Math.Min(i + x + y, n); dp[j] = Math.Max(dp[j], v + sz[j] - sz[j - x]); } } var ans = dp[n]; Console.WriteLine(ans);