#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using ld = long double;

#define all(x)  x.begin(),x.end()
#define v(x) vector<x>
#define nl '\n'
#define fxd(x) fixed << setprecision(x)
template<class t> using ordered_set = tree<t, null_type, less<t>, rb_tree_tag, tree_order_statistics_node_update>;
template<class t> using ordered_multiset = tree<t, null_type, less_equal<t>, rb_tree_tag, tree_order_statistics_node_update>;

ll n , d;
v(ll) arr;

pair<ll,ll> can(double x)
{
    v(double) prefsum(n+1,0);
            // val,indx
    vector<pair<double,ll>> prefmin(n+1);    
    for(ll i = 1; i <= n; i++)
    {
        prefsum[i] = prefsum[i-1] + (double)arr[i] - x; 
    }
    prefmin[0] = {0ll,0ll};
    for(ll i = 1; i <= n; i++)
    {
        if(prefsum[i] < prefmin[i-1].first)
        {
            prefmin[i] = {prefsum[i],i};
        }
        else
        {
            prefmin[i] = prefmin[i-1];
        }
    }
    
    for (ll r = d; r <= n; r++)
    {
        if(prefsum[r] - prefmin[r-d].first >= 0) return make_pair(prefmin[r-d].second+1,r); 
    }

    return make_pair(-1ll,-1ll);
}

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    cin >> n>> d;
    arr.resize(n+1);
    for (int i = 1; i <= n; i++)
    {
        cin >> arr[i];
    }

    ld l = 0, r = 1e8,mid;
    pair<ll,ll> ans = {1ll,1ll};

    for (int i = 0; i < 80; i++)
    {
        mid = (l+r)/2;

        pair<ll,ll> cur = can(mid);
        if(cur.first == -1ll && cur.second == -1ll)
        {
            r = mid;
        }
        else
        {
            l = mid;
            ans = cur;
        }
    }
    
    cout << ans.first << " " << ans.second;
}