#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAX_MOD 1000000007 #define REP(i,n) for(long long i = 0;i < n;++i) long long x[200000] = {}; long long seg[300000] = {}; long long setter(long long now) { seg[now] = max(seg[now * 2], seg[now * 2 + 1]); if (now != 1) { long long wow = setter(now / 2); } return 0; } long long find(long long now, long long n_l,long long n_r,long long w_l,long long w_r) { if (n_r - 1 <= w_l || w_r < n_l) return -1; if (w_l <= n_l&&n_r-1 <= w_r) return seg[now]; long long aaa = find(now*2,n_l,(n_l+n_r)/2,w_l,w_r); aaa = max(aaa,find(now*2+1,(n_l+n_r)/2,n_r,w_l,w_r)); return aaa; } #define nya 131072 int main() { long long n, d, k; cin >> n >> d >> k; REP(i, n) { cin >> x[i]; seg[nya+i] = x[i]; setter((nya+i)/2); } long long hoge = 0; long long left = -1; for (int i = 0;i < n;++i) { long long maxium = find(1, 0, nya + 1, i, i + d); if (hoge < (maxium - x[i])) { hoge = maxium - x[i]; left = i; } } if (left == -1) { cout << 0 << endl; return 0; } cout << hoge*k << endl; cout << left << " "; long long max_now = 0; long long max_right = 0; for (int q = 0;q <= d;++q) { if (max_now < x[q + left]) { max_now = x[q + left]; max_right = q + left; } } cout << max_right << endl; return 0; }