Language: C++

// vvvvvvvvvvvv TEMPLATE vvvvvvvvvvvv
#include <bits/stdc++.h>
using namespace std; using ll = long long; using P = pair<ll, ll>;
const ll linf = 1e18; const double eps = 1e-12, pi = acos(-1);
#define FOR(i,a,b) for (ll i=(a),__last_##i=(b);i<__last_##i;i++)
#define RFOR(i,a,b) for (ll i=(b)-1,__last_##i=(a);i>=__last_##i;i--)
#define REP(i,n) FOR(i,0,n)
#define RREP(i,n) RFOR(i,0,n)
#define __GET_MACRO3(_1, _2, _3, NAME, ...) NAME
#define each(i,a) for (auto&& i : a)
#define rep(...) __GET_MACRO3(__VA_ARGS__, FOR, REP)(__VA_ARGS__)
#define rrep(...) __GET_MACRO3(__VA_ARGS__, RFOR, RREP)(__VA_ARGS__)
#define pb push_back
#define eb emplace_back
#define all(a) begin(a),end(a)
#define chmin(x,v) x = min(x, v)
#define chmax(x,v) x = max(x, v)
template<typename T> ll min(ll a, const T&& b) { return a < b ? a : b; }
template<typename T> ll min(const T&& a, ll b) { return a < b ? a : b; }
template<typename T> ll max(ll a, const T&& b) { return a > b ? a : b; }
template<typename T> ll max(const T&& a, ll b) { return a > b ? a : b; }
template<typename Head> void out(Head h) { cout << h << endl; } template<typename Head, typename... Tail>void out(Head h, Tail... t) { cout << h << " "; out(t...); }
template<typename T> istream& operator>>(istream& is, vector<T>& v) { each(x,v) is >> x; return is; }
template<typename T> ostream& operator<<(ostream& os, const vector<T>& v) { rep(i,v.size()) { if (i) os << " "; os << v[i]; } return os; }
ostream& operator<<(ostream& os, const vector<string>& v) { rep(i,v.size()) { if (i) os << endl; os << v[i]; } return os; }
template<typename T> ostream& operator<<(ostream& os, const vector<vector<T>>& v) { rep(i,v.size()) { if (i) os << endl; os << v[i]; } return os; }
template<typename T1, typename T2> ostream& operator<<(ostream& os, const pair<T1, T2>& p) { return os << "(" << p.first << ", " << p.second << ")"; }
struct yes_no : std::numpunct<char> { string_type do_truename() const { return "Yes"; } string_type do_falsename() const { return "No"; } };
void solve(); int main() {
  ios::sync_with_stdio(false); cin.tie(0); locale loc(locale(), new yes_no); cout.imbue(loc); cout << fixed << setprecision(10) << boolalpha;
  solve();
}
// ^^^^^^^^^^^^ TEMPLATE ^^^^^^^^^^^^

void solve() {
  ll n, M; cin >> n >> M; n *= 2;
  vector<ll> a(n); cin >> a;
  each(x, a) x %= M;
  sort(all(a));
  auto check = [&](ll th) {
    ll s1 = lower_bound(all(a), th/2) - a.begin();
    ll s2 = upper_bound(all(a), th/2) - a.begin();
    ll s = (s1+s2) / 2;
    vector<ll> centers;
    rep(t, -1, 2) {
      centers.pb((s+t+n) % M);
    }
    rep(i, n) {
      ll l = M-a[i], r = (M+th-a[i]) % M;
      ll L = lower_bound(all(a), l);
      ll R = upper_bound(all(a), r);
      if (r < l) {
        if (R+n-L <= 5) {
          rep(i, L, n+R) {
            centers.pb((i + n) / 2 % n);
          }
        }
      }
      else {
        if (R-L <= 5) {
        }
      }
    }
    each(c, centers) {
      bool flag = true;
      rep(i, n/2) {
        ll x = (c-1-i+n)%n, y = (c + i) % n;
        if ((a[x] + a[y]) % M > th) {
          flag = false;
          break;
        }
      }
      if (flag) return true;
    }
    return false;
  };
  ll lb = 0, ub = M;
  rep(t, 60) {
    ll mid = (lb + ub) / 2;
    if (check(mid)) {
      ub = mid;
    }
    else {
      lb = mid;
    }
  }
  cout << ub << endl;
}


Compiler output:
a.cc: In lambda function:
a.cc:50:25: error: cannot convert '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >' to 'll' {aka 'long long int'} in initialization
   50 |       ll L = lower_bound(all(a), l);
      |              ~~~~~~~~~~~^~~~~~~~~~~
      |                         |
      |                         __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >
a.cc:51:25: error: cannot convert '__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >' to 'll' {aka 'long long int'} in initialization
   51 |       ll R = upper_bound(all(a), r);
      |              ~~~~~~~~~~~^~~~~~~~~~~
      |                         |
      |                         __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >