#include using namespace std; using ll = long long; int n, m, k, lb, ub; std::vector vec; bool check(int mid) { ll score = k + vec[mid]; std::vector vec2; vec2 = vec; vec2[mid] = -1; std::vector points; for (int j = 1; j <= (vec2.size()-1)/2; j++) { points.push_back(vec2[j*2] + vec2[j*2-1]); } points.push_back(score); sort(points.begin(), points.end()); auto it = upper_bound(points.begin(), points.end(), score); ll dis = distance(points.end(), it); if (dis < m) { return true; } return false; } int main() { bool exist_ans = false; vec.assign(n-1, 0); cin >> n >> m; cin >> k; for (int i = 0; i < n - 1; i++) { cin >> vec[i]; } sort(vec.begin(), vec.end()); lb = 0; ub = vec.size()-1; while (ub - lb > 1) { int mid = (ub + lb) / 2; if (check(mid)) { exist_ans = true; ub = mid; } else { lb = mid; } } if (exist_ans) { std::cout << vec[lb] + k << std::endl; return 0; } std::cout << -1 << std::endl; }