#include // O(NK) 解法 [[nodiscard]] static inline constexpr uint_fast64_t solve(const uint_fast32_t N, const uint_fast32_t K, const std::vector& A, const std::vector& B) noexcept { std::array>, 2> dp = { std::vector>(K + 1, { 0, 0 }), std::vector>(K + 1, { 0, 0 }) }; dp[1][0] = { A[0], 0 }; for (uint_fast32_t j = 1; j <= K; ++j) dp[1][j] = { A[0], B[0] }; for (uint_fast32_t i = 1; i < N; ++i) { dp[(i & 1) ^ 1][0] = { dp[i & 1][0][0] + A[i], 0 }; for (uint_fast32_t j = 1; j <= K; ++j) dp[(i & 1) ^ 1][j] = { std::max(dp[i & 1][j][0], dp[i & 1][j - 1][1]) + A[i], std::max(dp[i & 1][j - 1][0], dp[i & 1][j][1]) + B[i] }; } return std::max(dp[N & 1][K][0], dp[N & 1][K][1]); } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t N, K; std::cin >> N >> K; std::vector A(N), B(N); for (auto& a : A) std::cin >> a; for (auto& b : B) std::cin >> b; std::cout << solve(N, K, A, B) << '\n'; return 0; }