#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.141592653589793238462643383;
long long int gcd(long long int a, long long int b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
long long int Ceil(long long int a, long long int b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
const int MAX = 200009;
const int MOD = 1e9 + 7;
const int inf = 1e9 + 10;
vector<int> r, c, ans;
int n, a[5][55], cnt = 0;
int b[4][55];
pair<long long int, long long int> p[4][55];
int vis[4][55];
int dx[] = {-1, 0, 0, 1};
int dy[] = {0, -1, 1, 0};
bool chk(int j, int i, int ind) {
  if (j >= 0 && j <= 3 && i >= 0 && i < n && vis[j][i] == 0) {
    if (j >= 1 && j <= 2 && a[j][i] == 0)
      return true;
    else if (a[j][i] == ind)
      return true;
  }
  return false;
}
void go() {
  for (int j = (1); j <= (2); ++j)
    for (int i = 0; i < (n); ++i)
      if (a[j][i] != 0) {
        (memset((p), 0, sizeof(p))), (memset((vis), 0, sizeof(vis)));
        priority_queue<
            pair<long long int, pair<long long int, long long int> > >
            pq;
        int ind = a[j][i];
        pq.push((make_pair((0), ((make_pair((j), (i)))))));
        vis[j][i] = 1;
        while (!pq.empty()) {
          pair<long long int, pair<long long int, long long int> > cur =
              pq.top();
          pq.pop();
          int j = cur.second.first, i = cur.second.second, d = cur.first;
          if (j == 0 || j == 3)
            if (a[j][i] == ind) {
              vector<int> ta, ti, tj;
              pair<long long int, long long int> tmp = p[j][i];
              do {
                ta.push_back(ind), ti.push_back(i), tj.push_back(j);
                pair<long long int, long long int> tmp = p[j][i];
                j = tmp.first, i = tmp.second;
              } while (a[j][i] != ind);
              reverse((ta).begin(), (ta).end());
              reverse((ti).begin(), (ti).end());
              reverse((tj).begin(), (tj).end());
              for (int i = 0; i < ((int)((ta).size())); ++i)
                ans.push_back(ta[i]), c.push_back(ti[i]), r.push_back(tj[i]);
              cnt--;
              a[j][i] = 0;
              break;
            }
          for (int k = 0; k < (4); ++k) {
            int xj = j + dy[k], xi = i + dx[k];
            if (chk(xj, xi, ind))
              pq.push((make_pair((d - 1), ((make_pair((xj), (xi))))))),
                  p[xj][xi] = (make_pair((j), (i))), vis[xj][xi] = 1;
          }
        }
      }
}
void move1(pair<long long int, long long int> fir) {
  if (fir.second == 0)
    b[2][0] = a[1][fir.second], ans.push_back(a[1][fir.second]), r.push_back(2),
    c.push_back(0);
  else
    b[1][fir.second - 1] = a[1][fir.second], ans.push_back(a[1][fir.second]),
                      r.push_back(1), c.push_back(fir.second - 1);
}
void move2(pair<long long int, long long int> fir) {
  if (fir.second == n - 1)
    b[1][n - 1] = a[2][fir.second], ans.push_back(a[2][fir.second]),
             r.push_back(1), c.push_back(n - 1);
  else
    b[2][fir.second + 1] = a[2][fir.second], ans.push_back(a[2][fir.second]),
                      r.push_back(2), c.push_back(fir.second + 1);
}
void rotate() {
  pair<long long int, long long int> fir = (make_pair((-1), (-1)));
  (memset((b), 0, sizeof(b)));
  if (a[1][n - 1] == 0 && a[2][n - 1] != 0)
    fir = (make_pair((2), (n - 1)));
  else
    for (int i = (n - 1); i >= (1); --i)
      if (a[2][i] == 0 && a[2][i - 1] != 0) fir = (make_pair((2), (i - 1)));
  if (fir.first != -1) {
    int mgc = fir.second;
    while (fir.second != -1) {
      if (a[2][fir.second] != 0) move2(fir);
      fir.second--;
    }
    for (int i = 0; i < (n); ++i)
      if (a[1][i] != 0) fir = (make_pair((1), (i))), move1(fir);
    fir = (make_pair((2), (n - 1)));
    while (fir.second > mgc) {
      if (a[2][fir.second] != 0) move2(fir);
      fir.second--;
    }
    for (int j = (1); j <= (2); ++j)
      for (int i = 0; i < (n); ++i) a[j][i] = b[j][i];
    return;
  }
  if (a[2][0] == 0 && a[1][0] != 0)
    fir = (make_pair((1), (0)));
  else
    for (int i = (0); i <= (n - 2); ++i)
      if (a[1][i] == 0 && a[1][i + 1] != 0) fir = (make_pair((1), (i + 1)));
  if (fir.first != -1) {
    int mgc = fir.second;
    while (fir.second != n) {
      if (a[1][fir.second] != 0) move1(fir);
      fir.second++;
    }
    for (int i = (n - 1); i >= (0); --i)
      if (a[2][i] != 0) fir = (make_pair((1), (i))), move2(fir);
    fir = (make_pair((1), (0)));
    while (fir.second < mgc) {
      if (a[1][fir.second] != 0) move1(fir);
      fir.second++;
    }
    for (int j = (1); j <= (2); ++j)
      for (int i = 0; i < (n); ++i) a[j][i] = b[j][i];
    return;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int k;
  cin >> n >> k;
  for (int i = 0; i < (n); ++i) cin >> a[0][i];
  for (int i = 0; i < (n); ++i) cin >> a[1][i];
  for (int i = 0; i < (n); ++i) cin >> a[2][i];
  for (int i = 0; i < (n); ++i) cin >> a[3][i];
  for (int i = 0; i < (n); ++i) cnt += (a[1][i] != 0) + (a[2][i] != 0);
  go();
  if (cnt == 2 * n) {
    cout << -1;
    return 0;
  }
  while (cnt > 0) {
    go();
    if (cnt == 0) break;
    rotate();
  }
  cout << (int)((ans).size()) << '\n';
  for (int i = 0; i < ((int)((ans).size())); ++i)
    cout << ans[i] << ' ' << r[i] + 1 << " " << c[i] + 1 << '\n';
  return 0;
}
