#include <bits/stdc++.h>
using namespace std;
multiset<int, greater<int>> m1, m2;
int n, m;
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    int a;
    cin >> a;
    m1.insert(a);
  }
  for (int i = 0; i < n; ++i) {
    int a;
    cin >> a;
    m2.insert(a);
  }
  vector<int> ans;
  for (; m1.size();) {
    auto a = m1.begin();
    auto b = m2.begin();
    auto bestfora = m2.lower_bound(m - 1 - *a);
    auto bestforb = m1.lower_bound(m - 1 - *b);
    if (bestfora == m2.end()) --bestfora;
    if (bestforb == m1.end()) --bestforb;
    if ((*a + *b) % m > (*a + *bestfora) % m &&
        (*a + *b) % m > (*b + *bestforb) % m) {
      ans.push_back((*a + *b) % m);
      m1.erase(a);
      m2.erase(b);
    } else if ((*a + *bestfora) % m >= (*a + *b) % m &&
               (*a + *bestfora) % m >= (*b + *bestforb) % m) {
      ans.push_back((*a + *bestfora) % m);
      m1.erase(a);
      m2.erase(bestfora);
    } else {
      ans.push_back((*b + *bestforb) % m);
      m1.erase(bestforb);
      m2.erase(b);
    }
  }
  sort(ans.begin(), ans.end(), greater<int>());
  for (size_t i = 0; i < ans.size(); ++i) cout << ans[i] << ' ';
  return 0;
}
