# frozen_string_literal: true in_n, in_k = gets.chomp.split.map(&:to_i) in_a = gets.chomp.split.map(&:to_i) dp = Array.new((in_n + 1) * (in_k + 1), -(10**100)) if in_k > in_n.ceildiv(2) puts "Impossible" exit end stride = in_k + 1 dp[0] = 0 dp[stride] = 0 dp[stride + 1] = in_a[0] in_a.each_with_index do |a, i| next if i == 0 prev2_base = (i-1) * stride prev_base = (i) * stride current_base = (i+1) * stride dp[current_base] = 0 1.upto(in_k) do |k| dp[current_base + k] = [dp[prev_base + k], dp[prev2_base + k - 1] + a].max end end puts ((in_n).times.map { |n| dp[stride * (n+1) + in_k]}.max)