#include <bits/stdc++.h>
using namespace std;
int n, k;
pair<int, int> pos[250];
int arr[250][250];
bool visit[250];
vector<pair<int, pair<int, int> > > ans;
vector<int> v, vv;
bool cek(int a) {
  int x = pos[a].first;
  int y = pos[a].second;
  if (x == 2 && arr[x - 1][y] == a) return 1;
  if (x == 3 && arr[x + 1][y] == a) return 1;
  return 0;
}
void masuk(int a) {
  int x = pos[a].first;
  int y = pos[a].second;
  arr[x][y] = 0;
  if (x == 2) ans.push_back({a, {x - 1, y}});
  if (x == 3) ans.push_back({a, {x + 1, y}});
}
void masukin(int a) {
  int x = pos[a].first;
  int y = pos[a].second;
  if (x == 2) ans.push_back({a, {x - 1, y}});
  if (x == 3) ans.push_back({a, {x + 1, y}});
}
bool ceknol(int a) {
  int x = pos[a].first;
  int y = pos[a].second;
  if (x == 2 && y == 1) {
    if (arr[x + 1][y] == 0) return 1;
  } else if (x == 2) {
    if (arr[x][y - 1] == 0) return 1;
  } else if (x == 3 && y == n) {
    if (arr[x - 1][y] == 0) return 1;
  } else if (x == 3) {
    if (arr[x][y + 1] == 0) return 1;
  }
  return 0;
}
void geser(int a) {
  int x = pos[a].first;
  int y = pos[a].second;
  if (x == 2 && y == 1) {
    pos[a] = {x + 1, y};
  } else if (x == 2) {
    pos[a] = {x, y - 1};
  } else if (x == 3 && y == n) {
    pos[a] = {x - 1, y};
  } else if (x == 3) {
    pos[a] = {x, y + 1};
  }
  ans.push_back({a, {pos[a].first, pos[a].second}});
}
int main() {
  cin >> n >> k;
  for (int i = 1; i <= 4; i++)
    for (int j = 1; j <= n; j++) {
      cin >> arr[i][j];
      if (arr[i][j] != 0) {
        if (i == 2 || i == 3) pos[arr[i][j]] = {i, j};
      }
    }
  bool ceks = 0;
  for (int i = 2; i <= 3; i++) {
    for (int j = 1; j <= n; j++) {
      if (cek(arr[i][j]) || arr[i][j] == 0) ceks = 1;
    }
  }
  if (ceks == 0)
    cout << -1 << endl;
  else {
    for (int i = 2; i <= 3; i++)
      for (int j = 1; j <= n; j++) {
        if (cek(arr[i][j])) {
          masuk(arr[i][j]);
        }
      }
    for (int i = 1; i <= n; i++)
      if (arr[2][i] != 0) v.push_back(arr[2][i]);
    for (int i = n; i >= 1; i--)
      if (arr[3][i] != 0) v.push_back(arr[3][i]);
    int idx = v.size();
    for (int i = 0; i < v.size(); i++) {
      if (ceknol(v[i])) {
        idx = i;
        break;
      }
    }
    for (int i = idx; i < v.size(); i++) vv.push_back(v[i]);
    for (int i = 0; i < idx; i++) vv.push_back(v[i]);
    int cc = vv.size();
    bool d = 1;
    if (cc == 0) d = 0;
    while (true) {
      if (d == 0) break;
      for (int i = 0; i < vv.size(); i++) {
        if (visit[vv[i]]) continue;
        if (cek(vv[i])) {
          masukin(vv[i]);
          visit[vv[i]] = 1;
          cc--;
          if (cc == 0) {
            d = 0;
            break;
          }
        } else {
          geser(vv[i]);
        }
      }
    }
    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); i++)
      cout << ans[i].first << ' ' << ans[i].second.first << ' '
           << ans[i].second.second << endl;
  }
}
