#include <bits/stdc++.h>
using namespace std;
const int N = 55;
int arr[4][N];
int tmp[4][N];
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
int n, k;
bool valid(int x, int y) { return x >= 0 && x <= 3 && y >= 0 && y < n; }
int main() {
  vector<pair<int, pair<int, int> > > ans, v1, v2;
  scanf("%d %d", &n, &k);
  for (int j = 0; j < int(4); j++)
    for (int i = 0; i < int(n); i++) scanf("%d", &arr[j][i]);
  int fx = -1, fy = -1;
  for (int j = int(1); j <= int(2); j++)
    for (int i = 0; i < int(n); i++) {
      if (arr[j][i] == 0) {
        fx = j, fy = i;
        continue;
      }
      for (int k = 0; k < int(4); k++) {
        int nxtx = j + dx[k], nxty = i + dy[k];
        if (arr[j][i] && valid(nxtx, nxty) && arr[nxtx][nxty] == arr[j][i]) {
          ans.push_back(make_pair(arr[j][i], make_pair(nxtx, nxty)));
          arr[j][i] = 0;
          fx = j, fy = i;
          break;
        }
      }
    }
  if (fx == -1) {
    puts("-1");
    return 0;
  }
  int cars = 0;
  for (int j = int(1); j <= int(2); j++)
    for (int i = 0; i < int(n); i++) cars += (arr[j][i] != 0);
  if (cars == 0) {
    printf("%d\n", int(ans.size()));
    for (int i = 0; i < int(int(ans.size())); i++)
      printf("%d %d %d\n", ans[i].first, ans[i].second.first + 1,
             ans[i].second.second + 1);
    return 0;
  }
  for (int j = 0; j < int(4); j++)
    for (int i = 0; i < int(n); i++) tmp[j][i] = arr[j][i];
  int cnt = cars;
  while (cnt && int(ans.size()) + int(v1.size()) <= 20000) {
    if (arr[fx][fy] == 0) {
      if (fx == 1) {
        fy--;
        if (fy == -1) {
          fy = 0;
          fx = 2;
        }
      } else {
        fy++;
        if (fy == n) {
          fy = n - 1;
          fx = 1;
        }
      }
      continue;
    }
    bool done = 0;
    for (int k = 0; k < int(4); k++) {
      int nxtx = fx + dx[k], nxty = fy + dy[k];
      if (arr[fx][fy] && valid(nxtx, nxty) && arr[nxtx][nxty] == arr[fx][fy]) {
        v1.push_back(make_pair(arr[fx][fy], make_pair(nxtx, nxty)));
        arr[fx][fy] = 0;
        cnt--;
        done = true;
        break;
      }
    }
    if (done) continue;
    if (fx == 1) {
      int toy = fy + 1, tox = fx;
      if (toy == n) {
        toy = n - 1;
        tox = 3 - tox;
      }
      v1.push_back(make_pair(arr[fx][fy], make_pair(tox, toy)));
      swap(arr[fx][fy], arr[tox][toy]);
    } else {
      int toy = fy - 1, tox = fx;
      if (toy == -1) {
        toy = 0;
        tox = 3 - tox;
      }
      v1.push_back(make_pair(arr[fx][fy], make_pair(tox, toy)));
      swap(arr[fx][fy], arr[tox][toy]);
    }
  }
  for (int j = 0; j < int(4); j++)
    for (int i = 0; i < int(n); i++) arr[j][i] = tmp[j][i];
  cnt = cars;
  while (cnt && int(ans.size()) + int(v2.size()) <= 20000) {
    if (arr[fx][fy] == 0) {
      if (fx == 1) {
        fy++;
        if (fy == n) {
          fy = n - 1;
          fx = 2;
        }
      } else {
        fy--;
        if (fy == -1) {
          fy = 0;
          fx = 1;
        }
      }
      continue;
    }
    bool done = 0;
    for (int k = 0; k < int(4); k++) {
      int nxtx = fx + dx[k], nxty = fy + dy[k];
      if (arr[fx][fy] && valid(nxtx, nxty) && arr[nxtx][nxty] == arr[fx][fy]) {
        v2.push_back(make_pair(arr[fx][fy], make_pair(nxtx, nxty)));
        arr[fx][fy] = 0;
        cnt--;
        done = true;
        break;
      }
    }
    if (done) continue;
    if (fx == 1) {
      int toy = fy - 1, tox = fx;
      if (toy == -1) {
        toy = 0;
        tox = 3 - tox;
      }
      v2.push_back(make_pair(arr[fx][fy], make_pair(tox, toy)));
      swap(arr[fx][fy], arr[tox][toy]);
    } else {
      int toy = fy + 1, tox = fx;
      if (toy == n) {
        toy = n - 1;
        tox = 3 - tox;
      }
      v2.push_back(make_pair(arr[fx][fy], make_pair(tox, toy)));
      swap(arr[fx][fy], arr[tox][toy]);
    }
  }
  if (v1.size() > v2.size()) v1.swap(v2);
  int sz = int(ans.size()) + int(v1.size());
  if (sz > 20000) {
    puts("-1");
    return 0;
  }
  printf("%d\n", int(ans.size()) + int(v1.size()));
  for (int i = 0; i < int(int(ans.size())); i++)
    printf("%d %d %d\n", ans[i].first, ans[i].second.first + 1,
           ans[i].second.second + 1);
  for (int i = 0; i < int(int(v1.size())); i++)
    printf("%d %d %d\n", v1[i].first, v1[i].second.first + 1,
           v1[i].second.second + 1);
  return 0;
}
