#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define syosu(x) fixed< P; typedef pair pdd; typedef pair pll; typedef vector vi; typedef vector vvi; typedef vector vd; typedef vector vvd; typedef vector vl; typedef vector vvl; typedef vector vc; typedef vector vvc; typedef vector vs; typedef vector vb; typedef vector vvb; typedef vector

vp; typedef vector vvp; typedef vector vpll; typedef pair pip; typedef vector vip; const int inf=1<<30; const ll INF=1ll<<52; const double pi=acos(-1); const double eps=1e-8; const ll mod=1e9+7; const vi emp; const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,-0}; const int DX[8]={-1,-1,-1,0,0,1,1,1},DY[8]={1,0,-1,1,-1,1,0,-1}; class RMQ_Index{ private: vp rmq; P Query_func(int a,int b,int k,int l,int r){ if(r<=a||b<=l) return {-1,0}; if(a<=l&&r<=b) return rmq[k]; else{ int mid=(l+r)/2; P vl=Query_func(a,b,k*2+1,l,mid); P vr=Query_func(a,b,k*2+2,mid,r); if(vl.first==vr.first) return (vl.secondvr)?vl:vr; } } public: int n; void Init(int n_){ n=1; while(n0){ k=(k-1)/2; P L=rmq[k*2+1],R=rmq[k*2+2]; if(L.first==R.first) rmq[k]=L.secondR?L:R; } } P Query(int a,int b){ return Query_func(a,b,0,0,n); } int Open(int k){ return rmq[k+n-1].first; } }; int n,d; ll k; int main(){ cin>>n>>d>>k; RMQ_Index rmq; rmq.Init(n); for(int i=0;i>t; rmq.Update(i,t); } ll M=-INF; int j,l; for(int i=0;i