#include <bits/stdc++.h>
using namespace std;
int n, k, m;
int parcare[5][55];
int gol;
struct coord {
  int val;
  int x, y;
} ciclu[105], out[20005];
int main() {
  cin >> n >> k;
  for (int i = 1; i <= 4; ++i)
    for (int j = 1; j <= n; ++j) cin >> parcare[i][j];
  for (int i = 1; i <= n; ++i) {
    if (parcare[2][i] > 0 && parcare[2][i] == parcare[1][i]) {
      ++m;
      out[m].val = parcare[2][i];
      out[m].x = 1;
      out[m].y = i;
      --k;
      parcare[2][i] = 0;
    }
    if (parcare[3][i] > 0 && parcare[3][i] == parcare[4][i]) {
      ++m;
      out[m].val = parcare[3][i];
      out[m].x = 4;
      out[m].y = i;
      --k;
      parcare[3][i] = 0;
    }
  }
  for (int i = 1; i <= n; ++i) {
    ciclu[i].val = parcare[2][i];
    ciclu[i].x = 2;
    ciclu[i].y = i;
    if (ciclu[i].val == 0) gol = i;
  }
  for (int j = n + 1, i = n; i >= 1; --i, ++j) {
    ciclu[j].val = parcare[3][i];
    ciclu[j].x = 3;
    ciclu[j].y = i;
    if (ciclu[j].val == 0) gol = j;
  }
  if (gol == 0) {
    cout << -1;
    return 0;
  }
  while (k > 0) {
    int next = gol + 1;
    if (next > 2 * n) next = 1;
    if (ciclu[next].val > 0) {
      ++m;
      out[m].val = ciclu[next].val;
      out[m].x = ciclu[gol].x;
      out[m].y = ciclu[gol].y;
    }
    ciclu[gol].val = ciclu[next].val;
    if (ciclu[gol].val > 0) {
      int &val = ciclu[gol].val;
      int &x = ciclu[gol].x;
      int &y = ciclu[gol].y;
      if (x == 2 && val == parcare[x - 1][y]) {
        ++m;
        out[m].val = val;
        out[m].x = x - 1;
        out[m].y = y;
        val = 0;
        --k;
      } else if (x == 3 && val == parcare[x + 1][y]) {
        ++m;
        out[m].val = val;
        out[m].x = x + 1;
        out[m].y = y;
        val = 0;
        --k;
      }
    }
    gol = next;
  }
  cout << m << '\n';
  for (int i = 1; i <= m; ++i)
    cout << out[i].val << ' ' << out[i].x << ' ' << out[i].y << '\n';
}
