#include <bits/stdc++.h>
using namespace std;
class Move {
 public:
  int car, r, c;
  Move(int a, int b, int d) {
    car = a;
    r = b;
    c = d;
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  vector<Move> moves;
  int cur[4][n];
  int rem = k;
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < n; j++) {
      cin >> cur[i][j];
    }
  }
  for (int i = 0; i < n; i++) {
    if (cur[0][i] == cur[1][i] && cur[0][i] != 0) {
      moves.push_back(Move(cur[0][i], 1, i + 1));
      cur[0][i] = 0;
      cur[1][i] = 0;
      rem--;
    }
    if (cur[2][i] == cur[3][i] && cur[2][i] != 0) {
      moves.push_back(Move(cur[2][i], 4, i + 1));
      cur[2][i] = 0;
      cur[3][i] = 0;
      rem--;
    }
  }
  if (rem == 2 * n) {
    cout << -1 << endl;
    return 0;
  }
  while (rem > 0) {
    vector<pair<int, int> > order;
    for (int i = 0; i < n; i++) {
      order.push_back(make_pair(1, i));
    }
    for (int i = n - 1; i >= 0; i--) {
      order.push_back(make_pair(2, i));
    }
    int first = -1;
    for (int i = 0; i < 2 * n; i++) {
      if (cur[order[i].first][order[i].second] == 0) {
        first = i;
      }
    }
    assert(first != -1);
    for (int i = 1; i < 2 * n; i++) {
      int now = (first + i - 1) % (2 * n);
      int nex = (first + i) % (2 * n);
      cur[order[now].first][order[now].second] =
          cur[order[nex].first][order[nex].second];
      if (cur[order[nex].first][order[nex].second] != 0) {
        moves.push_back(Move(cur[order[nex].first][order[nex].second],
                             order[now].first + 1, order[now].second + 1));
      }
    }
    int bef = (first - 1 + 2 * n);
    bef %= (2 * n);
    cur[order[bef].first][order[bef].second] = 0;
    for (int i = 0; i < n; i++) {
      if (cur[0][i] == cur[1][i] && cur[0][i] != 0) {
        moves.push_back(Move(cur[0][i], 1, i + 1));
        cur[0][i] = 0;
        cur[1][i] = 0;
        rem--;
      }
      if (cur[2][i] == cur[3][i] && cur[2][i] != 0) {
        moves.push_back(Move(cur[2][i], 4, i + 1));
        cur[2][i] = 0;
        cur[3][i] = 0;
        rem--;
      }
    }
  }
  cout << moves.size() << "\n";
  for (int i = 0; i < moves.size(); i++) {
    cout << moves[i].car << " " << moves[i].r << " " << moves[i].c << "\n";
  }
}
