#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> card[3];
map<int, int> number[3];
string line;
int cardgame() {
cin >> n >> m;
cin.ignore();
for (int i = 0; i < 3; ++i) {
getline(cin, line);
istringstream iss(line);
int num;
while (iss >> num) {
if (number[i].count(num)) {
number[i][num]++;
} else {
number[i][num] = 1;
}
if (find(card[i].begin(), card[i].end(), num) == card[i].end()) {
card[i].push_back(num);
}
}
sort(card[i].begin(), card[i].end());
}
int flag = 0;
int former_value = -1;
int former_number = 1;
int noput = 0;
while (true) {
bool played = false;
for (int i = 0; i < card[flag].size(); ++i) {
if (card[flag][i] > former_value &&number[flag].count(card[flag][i])&& number[flag][card[flag][i]] >= former_number) {
number[flag][card[flag][i]] -= former_number;
former_value = card[flag][i];
if (number[flag][card[flag][i]] == 0) {
number[flag].erase(card[flag][i]);
}
if (number[flag].empty()) {
return flag + 1;
}
noput = 0;
played = true;
break;
}
}
for(int i=0;i<card[flag].size();++i){
if(played==true)break;
if (number[flag].count(card[flag][i])&&number[flag][card[flag][i]] > former_number) {
number[flag][card[flag][i]] -= (former_number + 1);
former_value = card[flag][i];
former_number+=1;
if (number[flag][card[flag][i]] == 0) {
number[flag].erase(card[flag][i]);
}
if (number[flag].empty()) {
return flag + 1;
}
noput = 0;
played = true;
break;
}
}
if (!played) {
noput++;
if (noput == 2) {
former_value = -1;
former_number = 1;
noput = 0;
}
}
flag = (flag + 1) % 3;
}
}
int main() {
cout << cardgame() << endl;
return 0;
}