#include #define ll long long #define INF 1000000005 #define MOD 1000000007 #define EPS 1e-10 #define rep(i,n) for(int i=0;i<(int)n;++i) #define each(a, b) for(auto (a): (b)) #define all(v) (v).begin(),(v).end() #define fi first #define se second #define pb push_back #define show(x) cout <<#x<<" = "<<(x)<P; const int MAX_N = 100005; int n,m; vector vec; ll K; bool possible(int cri) { ll sm = vec[cri] + K; int cnt = 0; int nw = 0; for(int i=n-2;i>=0;i--){ if(i == cri){ continue; } ll hoge = sm - vec[i]; while(nw < i){ if(nw == cri){ nw++; continue; } if(vec[nw] > hoge){ cnt++; nw++; if(cnt >= m){ return false; } break; } nw++; } if(nw >= i){ return true; } } return true; } int main() { cin >> n >> m; cin >> K; rep(i,n-1){ int a; cin >> a; vec.pb(a); } if(n == 2){ cout << vec[0] << endl; return 0; } sort(all(vec)); int l = 0; int h = n-2; if(possible(l)){ cout << vec[0] << endl; return 0; } if(!possible(h)){ cout << "-1\n"; return 0; } while(1){ int mid = (l+h)/2; if(mid == l){ cout << vec[h] << endl; break; } if(possible(mid)){ h = mid; }else{ l = mid; } } return 0; }