#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cstdio>
#include <cmath>
#include <cstring>
typedef long long int lli;
using namespace std;
priority_queue<lli> a;
priority_queue<lli> b;
priority_queue<lli> c;
lli n,m,x,y,z,A[15],B[15],C[15];

lli sol(bool w)
{
	lli res=0;
	while(a.size()!=n&&c.size()!=n){
		if(w){
			if(!a.empty()&& ( b.empty() || a.top()>b.top() ) ){
				b.push(a.top());
				a.pop();
			}
			else{
				a.push(b.top());
				b.pop();
			}
			w=false;
		}
		else{
			if(!c.empty()&& ( b.empty() || c.top()>b.top() ) ){
				b.push(c.top());
				c.pop();
			}
			else{
				c.push(b.top());
				b.pop();
			}
			w=true;
		}
		res++;
	}
	while(!a.empty()) a.pop();
	while(!c.empty()) c.pop();
	return res;
}

int main()
{
while(1){
	scanf("%lld %lld",&n,&m);
	if(n==0&&m==0) return 0;
	scanf("%lld",&x);
	for(int i=0;i<x;i++) {scanf("%lld",&A[i]); a.push(A[i]);}
	scanf("%lld",&y);
	for(int i=0;i<y;i++) {scanf("%lld",&B[i]); b.push(B[i]);}
	scanf("%lld",&z);
	for(int i=0;i<z;i++) {scanf("%lld",&C[i]); c.push(C[i]);}
	lli p=sol(1);
	for(int i=0;i<x;i++) {a.push(A[i]);}
	for(int i=0;i<y;i++) {b.push(B[i]);}
	for(int i=0;i<z;i++) {c.push(C[i]);}
	p=min(p,sol(0));
	if(p>m) p=-1;
	printf("%lld\n",p);
}
}