#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9;
const int mod = (int)1e9 + 7;
const int N = 200200;
using namespace std;
double pi = acos(-1.0);
int n, k;
int a[1000][1000];
int used[1000][1000];
vector<pair<int, pair<int, int> > > ans;
bool check() {
  bool ok = 1;
  for (int j = 1; j <= n; j++)
    if (used[1][j] == 0) ok = 0;
  for (int j = 1; j <= n; j++)
    if (used[4][j] == 0) ok = 0;
  return ok;
}
void in_place() {
  for (int j = 1; j <= n; j++) {
    if (a[1][j] == 0) continue;
    if (a[1][j] == a[2][j] && used[1][j] == 0) {
      used[1][j] = 1;
      a[2][j] = 0;
      ans.push_back(make_pair(a[1][j], make_pair(1, j)));
    }
  }
  for (int j = 1; j <= n; j++) {
    if (a[4][j] == 0) continue;
    if (a[3][j] == a[4][j] && used[4][j] == 0) {
      used[4][j] = 1;
      a[3][j] = 0;
      ans.push_back(make_pair(a[4][j], make_pair(4, j)));
    }
  }
}
void moving() {
  for (int j = n; j >= 1; j--) {
    if (a[2][j] == 0) continue;
    if (j == n) {
      if (a[3][j] == 0) {
        a[3][j] = a[2][j];
        a[2][j] = 0;
        ans.push_back(make_pair(a[3][j], make_pair(3, j)));
      }
    } else {
      if (a[2][j + 1] == 0) {
        a[2][j + 1] = a[2][j];
        a[2][j] = 0;
        ans.push_back(make_pair(a[2][j + 1], make_pair(2, j + 1)));
      }
    }
  }
  in_place();
  if (check()) {
    if (ans.size() > 20000) {
      cout << -1;
      exit(0);
    }
    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;
    exit(0);
  }
  for (int j = 1; j <= n; j++) {
    if (a[3][j] == 0) continue;
    if (j == 1) {
      if (a[2][j] == 0) {
        a[2][j] = a[3][j];
        a[3][j] = 0;
        ans.push_back(make_pair(a[2][j], make_pair(2, j)));
      }
    } else {
      if (a[3][j - 1] == 0) {
        a[3][j - 1] = a[3][j];
        a[3][j] = 0;
        ans.push_back(make_pair(a[3][j - 1], make_pair(3, j - 1)));
      }
    }
  }
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 1; i <= 4; i++) {
    for (int j = 1; j <= n; j++) {
      cin >> a[i][j];
    }
  }
  for (int j = 1; j <= n; j++) {
    if (a[1][j] == 0) used[1][j] = 1;
    if (a[4][j] == 0) used[4][j] = 1;
  }
  int cnt = 0;
  while (1) {
    in_place();
    if (check()) {
      if (ans.size() > 20000) {
        cout << -1;
        return 0;
      }
      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;
      return 0;
    }
    if (ans.size() > 20000) {
      cout << -1;
      return 0;
    }
    moving();
    cnt++;
    if (cnt == 30000) {
      cout << -1;
      exit(0);
    }
  }
  return 0;
}
