
#include <cstdio>

using namespace std;

int x[1000000], y[1000000], delta2[1000000];
long long sum[1000000], delta1[1000000];

int solve(int n, long long m, int z) {
	for (int i = 0; i < n; i ++) y[i] = x[i];
	for (int i = 0; i < n - 1; i ++)
		if (y[i+1] - y[i] > z) {
			m -= y[i+1] - y[i] - z;
			y[i+1] = y[i] + z;
		}
	for (int i = n - 1; i > 0; i --)
		if (y[i-1] - y[i] > z) {
			m -= y[i-1] - y[i] - z;
			y[i-1] = y[i] + z;
		}
	if (m < 0) return -1;
	for (int i = 0; i < n; i ++) sum[i] = 0;
	for (int i = 0; i < n; i ++) delta1[i] = 0;
	for (int i = 0; i < n; i ++) delta2[i] = 0;
	for (int i = 0; i < n; i ++) {
		int t = i + y[i] / z;
		if (t >= n) t = n - 1;
		delta1[t] += y[i] - (t - i) * z;
		delta2[t] ++;
		if (i > 0) delta1[i-1] -= y[i];
		delta2[i] --;
	}
	long long s = 0;
	int cnt = 0;
	for (int i = n - 1; i >= 0; i --) {
		s += delta1[i] + (long long)z * cnt;
		sum[i] += s;
		cnt += delta2[i];
	}
	for (int i = 0; i < n; i ++) delta1[i] = 0;
	for (int i = 0; i < n; i ++) delta2[i] = 0;
	for (int i = n - 1; i >= 0; i --) {
		int t = i - y[i] / z;
		if (t < 0) t = 0;
		delta1[t] += y[i] - (i - t) * z;
		delta2[t] ++;
		delta1[i] -= y[i];
		if (i > 0) delta2[i-1] --;
	}
	s = 0;
	cnt = 0;
	for (int i = 0; i < n; i ++) {
		s += delta1[i] + (long long)z * cnt;
		sum[i] += s;
		cnt += delta2[i];
	}
	for (int i = 0; i < n; i ++)
		if (sum[i] <= m) return i;
	return -1;
}

int main() {
	int n;
	long long m;
	scanf("%d%lld", &n, &m);
	for (int i = 0; i < n; i ++) scanf("%d", &x[i]);
	long long sum = 0;
	for (int i = 0; i < n; i ++) sum += x[i];
	if (sum <= m) {
		printf("1 0\n");
		return 0;
	}
	
	int head = 1, tail = 1000000000;
	while (head <= tail) {
		int mid = (head + tail) / 2;
		if (solve(n, m, mid) != -1)
			tail = mid - 1;
		else
			head = mid + 1;
	}
	printf("%d %d\n", solve(n, m, tail + 1) + 1, tail + 1);
	
	return 0;
}
