#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; struct Node { int day; ll x; Node(int day = -1, ll x = -1) { this->day = day; this->x = x; } bool operator>(const Node &n) const { if (x == n.x) { return day > n.day; } else { return x > n.x; } } }; int main() { ll N, D, K; cin >> N >> D >> K; priority_queue , greater> pque; ll X[N]; for (int i = 0; i < N; ++i) { cin >> X[i]; } pque.push(Node(0, X[0])); ll ans = 0; int j = -1; int k = -1; for (int day = 1; day <= N - 1; ++day) { ll x = X[day]; while (day - pque.top().day > D) { pque.pop(); } ll diff = x - pque.top().x; if (ans < diff * K) { ans = diff * K; j = pque.top().day; k = day; } pque.push(Node(day, x)); } if (ans == 0) { cout << 0 << endl; } else { cout << ans << endl; cout << j << " " << k << endl; } return 0; }