#include <bits/stdc++.h>
using namespace std;
#define int              long long int
#define double           long double
#define print(a)         for(auto x : a) cout << x << " "; cout << endl


const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;

inline int power(int a, int b, int mod=M) {
    int x = 1;
    a %= mod;
    while (b) {
        if (b & 1) x = (x * a) % mod; 
        a = (a * a) % mod;
        b >>= 1;
    }
    return x;
}


//_ ***************************** START Below *******************************




vector<int> a;

//* For Sorted array 

int consistency(int n, int k){
 
    int len = 0;
 
    int s = 0, e = 0;   
 
    while(e<n){
 
        if( a[e] - a[s]  <= k){
            len = max(len, e-s+1);
            e++;
        }
        else{
            while(s<=e && a[e] - a[s] > k){
                s++;
            }
 
            len = max(len, e-s+1);
            e++;
        }
    }
 
	return len;
}





//* For Unsorted array : 

//* Template 1 : 

int consistency1(int n, int k){
	
    int len = 0;
    
    deque<int> up;
    deque<int> down;    
    
    int s = 0, e = 0;   
    
    while(e<n){
        while(!up.empty() && a[e] < a[up.back()]) up.pop_back();
        up.push_back(e);    
        
        while(!down.empty() && a[e] > a[down.back()]) down.pop_back();
        down.push_back(e);  
        
        int mini = a[up.front()];
        int maxi = a[down.front()]; 
        
        if(maxi - mini <= k){
            len = max(len, e-s+1);
            e++;
        }
        else{
            while(s<=e){
                int mini = a[up.front()];
                int maxi = a[down.front()]; 
                
                if(maxi - mini <= k) break; 
                
                if(s == up.front()) up.pop_front();
                if(s == down.front()) down.pop_front();
                s++;
            }
            
            if(maxi - mini <= k) len = max(len, e-s+1);
            e++;
        }
    }
	
	return len;
}





//* Template 2 : 

int consistency2(int n, int k){
	
    int len = 0;
    
    deque<int> up;
    deque<int> down;    
    
    
    for(int i=0, j=0; i<n; i++){
        while(!up.empty() && a[i] < a[up.back()]) up.pop_back();
        up.push_back(i);    
        
        while(!down.empty() && a[i] > a[down.back()]) down.pop_back();
        down.push_back(i);  
        
        int mini = a[up.front()];
        int maxi = a[down.front()]; 
        
        while(j<=i){
            int mini = a[up.front()];
            int maxi = a[down.front()]; 
            
            if(maxi - mini <= k) break; 
            
            if(j == up.front()) up.pop_front();
            if(j == down.front()) down.pop_front();
            j++;
        }
        
        if(maxi - mini <= k) len = max(len, i-j+1);
    }
	
	return len;
}












int practice(int n, int k){


    return 0;
}





void solve() {
    
    int n, k;
    cin>> n >> k;
    
    a.resize(n);
    for(int i=0; i<n; i++) cin >> a[i];
    
    cout << consistency(n, k)  << " " << consistency1(n, k) << " " <<  consistency2(n, k) << endl;


}





int32_t main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}