from collections import defaultdict from bisect import bisect_left class SegmentTree: def __init__(self, N, mode): n_ = 1 while n_ < N: n_ *= 2 self.n = n_ self.mode = mode if self.mode == min: self.arr = [2**31-1] * (2*self.n - 1) elif self.mode == max: self.arr = [-2**31+1] * (2*self.n - 1) def update(self, k, a): k += self.n - 1 self.arr[k] = a while k > 0: k = (k - 1) // 2 self.arr[k] = self.mode(self.arr[2*k+1], self.arr[2*k+2]) def query(self, l, r): L, R = l + self.n, r + self.n if self.mode == min: res = 2**31-1 else: res = -2**31+1 while L < R: if R & 1: R -= 1 res = self.mode(res, self.arr[R-1]) if L & 1: res = self.mode(res, self.arr[L-1]) L += 1 L >>= 1 R >>= 1 return res N, D, K = map(int, input().split()) x = [int(input()) for _ in range(N)] st = SegmentTree(N, max) d = defaultdict(list) for i in range(N): st.update(i, x[i]) d[x[i]].append(i) ans = 0 s, e = None, None for i in range(N-1): before = x[i] after = st.query(i+1, min(N, i+1+D)) profit = (after - before) * K if profit > ans: s = i index = bisect_left(d[after], i) e = d[after][index] ans = profit print(ans) if ans > 0: print(s, e)