#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
template <class T>
inline T MAX(T a, T b) {
  if (a > b) return a;
  return b;
}
template <class T>
inline T MIN(T a, T b) {
  if (a < b) return a;
  return b;
}
const int N = 111;
const int M = 11111;
const long long MOD = 1000000007LL;
const int dir[4][2] = {1, 0, -1, 0, 0, -1, 0, 1};
const int INF = 0x3f3f3f3f;
int vis1[111111], vis2[111111];
vector<int> f, res;
stack<int> s;
int main() {
  int i, j, a, b, n, m, x;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; ++i) {
    scanf("%d", &x);
    vis1[x]++;
  }
  for (i = 0; i < n; ++i) {
    scanf("%d", &x);
    vis2[m - 1 - x]++;
  }
  for (i = m - 1; i >= 0; --i) {
    while (vis2[i]--) s.push(m - 1 - i);
    while (vis1[i]--) {
      if (!s.empty()) {
        res.push_back(s.top() + i);
        s.pop();
      } else {
        f.push_back(i);
      }
    }
  }
  if (f.size() != 0) {
    for (i = 0; i < f.size(); ++i) {
      res.push_back(s.top() + f[i] - m);
      s.pop();
    }
  }
  sort(res.begin(), res.end());
  for (i = n - 1; i >= 0; i--) printf("%d ", res[i]);
  return 0;
}
