#include <iostream>
#include <stack>
#include <cstring>
using namespace std;

int n, m, cnt;
int pos[20], tmpPos[20];

void copyPos(int *fromPos, int *toPos){
  for(int i = 0; i < 20; i++){
    toPos[i] = fromPos[i];
  }
}

void move(int x, int to){
  if(pos[x] == to){
    return;
  }

  int ops = -to + 2;

  if(pos[x] == ops){
    for(int i = x + 1; i < n; i++){
      move(i, to);
      if(cnt > m) return;
    }

    cnt++;
    if(cnt > m) return;
    pos[x] = 1;
  }

  if(pos[x] == 1){
    for(int i = x + 1; i < n; i++){
      move(i, ops);
      if(cnt > m) return;
    }

    cnt++;
    if(cnt > m) return;
    pos[x] = to;
  }
}

void solve(){
  int res = m + 1;

  copyPos(pos, tmpPos);
  cnt = 0;

  for(int i = 0; i < n; i++){
    move(i, 0);
    if(cnt > m) break;
  }

  res = min(res, cnt);
  copyPos(tmpPos, pos);
  cnt = 0;

  for(int i = 0; i < n; i++){
    move(i, 2);
    if(cnt > m) break;
  }

  res = min(res, cnt);

  cout << (res == m + 1 ? -1 : res) << endl;
}

int main(){
  while(cin >> n >> m, n || m){
    for(int i = 0; i < 3; i++){
      int a;
      cin >> a;

      for(int j = 0; j < a; j++){
        int x;
        cin >> x;
        x--;
        pos[x] = i;
      }
    }

    solve();
  }
}