#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ss stable_sort
#define ll long long
int arr[100005];
int arr2[100005]; //길이의 절반, 넉넉하게 5더해줌
int Min=200005; //뚫는 장애물의 합 = 길이 +5(추가)
int cnt; //뚫는 장애물의 개수
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, h;
cin >> n >> h; //입력
for (int i = 0; i < n / 2; i++) { //반반 입력받아서 n/2
cin >> arr[i]>> arr2[i];
}
sort(arr, arr + n/2);
sort(arr2, arr2 + n / 2); //이분 탐색전 반드시 정렬
for (int i = 1; i <= h; i++) { //높이별 이분탐색 진행
int a = lower_bound(arr, arr + (n / 2), i) - arr;
//밑에 있는 장애물의 경우 높이가 i이상이면 뚫림
//값이 i 이상인 최소 인덱스 반환
a += upper_bound(arr2, arr2 + n / 2, h - i) - arr2;
//위에 있는 장애물의 경우 높이가 h-i보다 커야함.
// 값이 h-i보다 큰 최소 인덱스 반환.
//이분탐색
a = n - a; //뚫는 개수는 전체 n에서 못뚫는 애들 뺴줌
if (Min == a) { //구하고 있는 최소값과 a가 같을 떄
cnt++; //개수++
}
else if (Min > a) { //구하고 있는 최소값보다 a가 작을 때
Min = a; //최소를 구하므로 a가 Min이 됨.
cnt = 1; //개수는 1부터 다시 셈.
}
}
cout << Min << " " << cnt;
return 0;
}