#include <bits/stdc++.h>
using namespace std;
const int MAX = 55;
int n, k;
int in[4][MAX];
vector<pair<int, pair<int, int>>> res;
void MoveWhite(int xf, int yf, int xt, int yt, int xb, int yb) {
  set<pair<int, int>> vis;
  vis.insert(make_pair(xb, yb));
  int dx, dy;
  while (true) {
    vis.insert(make_pair(xf, yf));
    dx = dy = 0;
    if (xf < xt) dx = +1;
    if (xf > xt) dx = -1;
    if (yf < yt) dy = +1;
    if (yf > yt) dy = -1;
    if (dx == 0 && dy == 0) break;
    int tx = xf, ty = yf;
    if (dx && !vis.count(make_pair(tx + dx, ty)))
      tx += dx;
    else if (dy && !vis.count(make_pair(tx, ty + dy)))
      ty += dy;
    else {
      for (int a = -1; a <= 1; ++a)
        for (int b = -1; b <= 1; ++b) {
          int x = xb + a, y = yb + b;
          if (x < 1 || x > 2 || y < 0 || y >= n) continue;
          if (vis.count(make_pair(x, y))) continue;
          if (abs(tx - x) + abs(ty - y) == 1) {
            tx = x;
            ty = y;
            goto END;
          }
        }
    END:;
    }
    if (in[tx][ty] > 0) {
      res.push_back(make_pair(in[tx][ty], make_pair(xf, yf)));
      swap(in[xf][yf], in[tx][ty]);
    }
    xf = tx, yf = ty;
  }
}
vector<pair<int, int>> dir = {make_pair(-1, 0), make_pair(+1, 0),
                              make_pair(0, -1), make_pair(0, +1)};
pair<int, int> Cell(int x, int y) {
  for (const auto& d : dir) {
    int nx = x + d.first, ny = y + d.second;
    if ((nx == 1 || nx == 2) && ny >= 0 && ny < n && in[nx][ny] == 0)
      return make_pair(nx, ny);
  }
  return make_pair(-1, -1);
}
pair<int, int> Target(int tip) {
  for (int i = 0; i < n; ++i) {
    if (in[0][i] == tip) return make_pair(0, i);
    if (in[3][i] == tip) return make_pair(3, i);
  }
}
int main() {
  scanf("%d%d", &n, &k);
  for (int j = 0; j < 4; ++j)
    for (int i = 0; i < n; ++i) scanf("%d", &in[j][i]);
  if (k == 2 * n) {
    for (int i = 0; i < n; ++i) {
      if (in[1][i] == in[0][i]) {
        res.push_back(make_pair(in[1][i], make_pair(0, i)));
        in[1][i] = 0;
        break;
      }
      if (in[2][i] == in[3][i]) {
        res.push_back(make_pair(in[2][i], make_pair(3, i)));
        in[2][i] = 0;
        break;
      }
    }
    if (res.empty()) {
      printf("-1\n");
      exit(0);
    }
  }
  while (true) {
    int cx = -1, cy = -1;
    for (int i = 0; i < n; ++i) {
      if (in[1][i] > 0 && Cell(1, i).first != -1) {
        cx = 1, cy = i;
        break;
      }
      if (in[2][i] > 0 && Cell(2, i).first != -1) {
        cx = 2, cy = i;
        break;
      }
    }
    if (cx == -1) break;
    pair<int, int> fr(cx, cy);
    pair<int, int> to = Target(in[cx][cy]);
    if (to.first == 0)
      to.first = 1;
    else
      to.first = 2;
    while (fr != to) {
      pair<int, int> nxt = fr;
      if (fr.first != to.first) {
        if (fr.first < to.first)
          ++nxt.first;
        else
          --nxt.first;
      } else {
        if (fr.second < to.second)
          ++nxt.second;
        else
          --nxt.second;
      }
      pair<int, int> emp = Cell(fr.first, fr.second);
      MoveWhite(emp.first, emp.second, nxt.first, nxt.second, fr.first,
                fr.second);
      res.push_back(make_pair(in[fr.first][fr.second], nxt));
      swap(in[fr.first][fr.second], in[nxt.first][nxt.second]);
      fr = nxt;
    }
    if (to.first == 1)
      --to.first;
    else
      ++to.first;
    res.push_back(make_pair(in[fr.first][fr.second], to));
    in[fr.first][fr.second] = 0;
  }
  printf("%d\n", ((int)(res).size()));
  for (const auto& e : res)
    printf("%d %d %d\n", e.first, e.second.first + 1, e.second.second + 1);
  return 0;
}
