#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // c++11 #include #include #include #include #define mp make_pair #define mt make_tuple #define rep(i, n) for (int i = 0; i < (n); i++) using namespace std; using ll = long long; using ull = unsigned long long; using pii = pair; const int INF = 1 << 29; const double EPS = 1e-9; const ll MOD = 1000000007; const int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1}; int N,D,K; vector X; int main() { cin >> N >> D >> K; X.resize(N); for (auto &val : X){ cin >> val; } ll res = 0; priority_queue, greater> pque; set deleted; pii d(INF, INF); for (int i = 0; i < N; i++){ int val = X[i]; int buy_val,idx; buy_val = INF; idx = -1; while (not pque.empty()){ pii p = pque.top(); idx = p.second; if (deleted.count(idx)){ pque.pop(); continue; } buy_val = p.first; break; } ll tmp = (ll)(val - buy_val) * K; if (tmp > 0 and tmp >= res){ if (tmp > res){ d = mp(idx, i); }else if (tmp == res){ d = min(d, mp(idx, i)); } res = tmp; } if (i - D >= 0){ deleted.emplace(i - D); } pque.emplace(mp(val, i)); } cout << res << endl; if (res != 0){ cout << d.first << " " << d.second << endl; } return 0; }