#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m, input, cnt = 0;
int f, r, check;
cin >> n >> m;
vector<short> v;
for (int i = 0; i < n; i++) {
cin >> input;
v.push_back(input);
}
sort(v.begin(), v.end());
f = 0;
r = v.size() - 1;
check = r;
while (f < r) {
if (v[f] + v[r] > m) {
r--;
continue;
} else if (v[f] + v[r] == m) {
cnt++;
f++;
check = r;
} else {
f++;
r = check;
}
}
cout<<cnt<<endl;
}
투포인터, 조합 등으로 풀 수 있지만 벡터를 정렬한 후 양 끝의 합이 m이 되는 시점을 찾는 방식으로 구했다.