// {{{
// vim:filetype=cpp foldmethod=marker foldmarker={{{,}}}
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <climits>
#include <complex>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ALL(A)		(A).begin(),(A).end()
#define DUMP(A)    cout<<#A<<"="<<(A)<< endl
#define SIZE(A)    (int)((A).size())
#define MP  make_pair
#define PB  push_back
using namespace std;
typedef long long ll;

int vx[]={1,0,-1,0},vy[]={0,1,0,-1};
// }}}

int main(){
    int n,m;
    for(;;){
        scanf("%d%d",&n,&m);
        if(n==0&&m==0) break;
        stack<int> sts[3],temp[3];
        for(int i=0;i<3;i++){
            int p,num;
            scanf("%d",&p);
            for(int j=0;j<p;j++){
                scanf("%d",&num);
                sts[i].push(num);
            }
            temp[i]=sts[i];
        }
        int mi=INT_MAX;
        bool isle=true;
        if(sts[0].size()==n || sts[2].size()==n){
            mi=min(mi,0);
        }else{
            for(int i=0;i<m;i++){
                if(isle){
                    if(sts[0].empty() || (!sts[1].empty() && sts[0].top()<sts[1].top())){
                        sts[0].push(sts[1].top());
                        sts[1].pop();
                    }else{
                        sts[1].push(sts[0].top());
                        sts[0].pop();
                    }
                }else{
                    if(sts[1].empty() || (!sts[2].empty() && sts[1].top()<sts[2].top())){
                        sts[1].push(sts[2].top());
                        sts[2].pop();
                    }else{
                        sts[2].push(sts[1].top());
                        sts[1].pop();
                    }
                }
                isle=!isle;
                if(sts[0].size()==n || sts[2].size()==n){
                    mi=min(mi,i+1);
                    break;
                }
            }
            for(int i=0;i<3;i++){
                sts[i]=temp[i];
            }
            isle=false;
            for(int i=0;i<m;i++){
                if(isle){
                    if(sts[0].empty() || (!sts[1].empty() && sts[0].top()<sts[1].top())){
                        sts[0].push(sts[1].top());
                        sts[1].pop();
                    }else{
                        sts[1].push(sts[0].top());
                        sts[0].pop();
                    }
                }else{
                    if(sts[1].empty() || (!sts[2].empty() && sts[1].top()<sts[2].top())){
                        sts[1].push(sts[2].top());
                        sts[2].pop();
                    }else{
                        sts[2].push(sts[1].top());
                        sts[1].pop();
                    }
                }
                if(sts[0].size()==n || sts[2].size()==n){
                    mi=min(mi,i+1);
                    break;
                }
                isle=!isle;
            }
        }
        if(mi==INT_MAX) printf("%d\n",-1);
        else printf("%d\n",mi);

LABEL:  ;
    }
}

Measured memory_bytes: 940