#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,m,n) for(int i=(m); i<(int)(n); i++) #define RREP(i,m,n) for(int i=(int)(n-1); i>=m; i--) #define rep(i,n) REP(i,0,n) #define rrep(i,n) RREP(i,0,n) #define all(a) (a).begin(),(a).end() #define rall(a) (a).rbegin(),(a).rend() #define aut(r,v) __typeof(v) r = (v) #define each(it,o) for(aut(it,(o).begin()); it!=(o).end(); ++it) #define reach(it,o) for(aut(it,(o).rbegin()); it!=(o).rend(); ++it) #define fi first #define se second #define dump(x) cerr << " [L" << __LINE__ << "] " << #x << " = " << (x) << endl; inline void debug(){cerr< void debug(const First& first, const Rest&... rest){cerr<string join(vector&v, string del=", ") {stringstream s;rep(i,v.size())s< ostream& operator<<(ostream& o, const pair& p) {return o<<"("<ostream& operator<<(ostream& o, vector&v) {if(v.size())o<<"["<ostream& operator<<(ostream& o, vector >&vv) {int l=vv.size();if(l){rep(i,l){o<<(i==0?"[ ":",\n ")<ostream& operator<<(ostream& o, const set& st) {vector v(st.begin(),st.end());o<<"{ "<ostream& operator<<(ostream& o, const map& m) {each(p,m){o<<(p==m.begin()?"{ ":",\n ")<<*p<<(p==--m.end()?" }":"");}return o;} using ll = long long; using pii = pair; using vi = vector; using vvi = vector; using vl = vector; using vvl = vector; const double PI = (1*acos(0.0)); const double INF = 0x3f3f3f3f; const double INFL = 0x3f3f3f3f3f3f3f3fLL; const double EPS = 1e-9; const double mod = 1e9 + 7; inline void finput(string filename) { freopen(filename.c_str(), "r", stdin); } struct RMQ{ int n; vector dat; void init(int n_){ n = 1; while(n < n_) n <<= 1; dat = vector(2*n-1, -1); } void update(int k, int a){ int reaf = k+n-1; dat[reaf] = a; while(reaf > 0){ reaf = (reaf-1) / 2; dat[reaf] = max(dat[reaf*2+1], dat[reaf*2+2]); } } int search(int a, int b, int k, int l, int r){ if(b <= l || r <= a) return -1; if(a <= l && r <= b) return dat[k]; else{ int rl = search(a, b, 2*k+1, l, (l+r)/2); int rr = search(a, b, 2*k+2, (l+r)/2, r); return max(rl, rr); } } int query(int a, int b){ return search(a, b+1, 0, 0, n); } }; vi x; int main(){ ios_base::sync_with_stdio(0); // finput("./input"); ll N, D, K; cin >> N >> D >> K; RMQ rmq; rmq.init(N); rep(i, N){ int _x; cin >> _x; x.push_back(_x); rmq.update(i, _x); } ll ma = -1; int j = -1, k = -1; rep(i,N){ int m = rmq.query(i, min(i+D, N)); if(ma < m - x[i]){ ma = m - x[i]; j = i; } } REP(i,j,min(j+D+1,N)) if(x[i] - x[j] == ma){ k = i; break; } cout << ma*K << endl; if(ma != 0) cout << j << " " << k << endl; return 0; }