/* CodeForces 231C
给n个数 可以任意数加值,每次加1,一共可以加m次 不需要全部用完
问怎么加 使得操作完后 其中一个数出现的次数最多
如有多个 输出最小的
Input
5 3
6 3 4 0 2 (加一次给3 两次给2)
Output
3 4 (最多有3个4)
有点像 two pointer 法
先排序
cur 记录当前位置
sum 记录在cur之后 i之前的数 都加到a[i]这个数所需要的值
然后 m < 当前值的话
cur 往后移
再 i 往后移
还有就是 sum会爆int 啊 要用long long
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define pi acos(-1)
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 1e5 + 5;
LL a[maxn];
int main(void)
{
// freopen("C:\\Users\\wave\\Desktop\\NULL.exe\\NULL\\in.txt","r", stdin);
LL n, m, i, j, k, d;
LL mcnt, mnum, t, sum, cur, tmp;
cin >> n >> m;
for (i = 1; i <= n; i++)
cin >> a[i];
sort(a+1, a+1+n);
mcnt = 1;
mnum = a[1];
sum = 0;
cur = 1;
t = 0;
for (i = 2; i <= n; i++){
d = a[i] - a[i-1];
t++;
sum += d * t;
while (sum > m){
sum -= a[i] - a[cur];
cur++;
t--;
}
if (t + 1 > mcnt){
mcnt = t + 1;
mnum = a[i];
}
}
printf("%I64d %I64d\n", mcnt, mnum);
return 0;
}