#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
struct Player {
int id;
ll s, t;
int loss_count;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
if (!(cin >> n >> m)) return 0;
vector<Player> players(n);
vector<int> order(n);
for (int i = 0; i < n; ++i) cin >> players[i].s;
for (int i = 0; i < n; ++i) cin >> players[i].t;
for (int i = 0; i < n; ++i) {
cin >> order[i];
players[order[i] - 1].id = order[i];
players[order[i] - 1].loss_count = 0;
}
// 建立初始比賽順序的指標陣列
vector<int> current_round;
for (int i = 0; i < n; ++i) {
current_round.push_back(order[i] - 1);
}
while (current_round.size() > 1) {
vector<int> winners, losers;
int num_players = current_round.size();
for (int i = 0; i < num_players - 1; i += 2) {
int p1_idx = current_round[i];
int p2_idx = current_round[i + 1];
ll a = players[p1_idx].s;
ll b = players[p1_idx].t;
ll c = players[p2_idx].s;
ll d = players[p2_idx].t;
if (a * b >= c * d) {
// p1 獲勝
players[p1_idx].s = a + (c * d) / (2 * b);
players[p1_idx].t = b + (c * d) / (2 * a);
players[p2_idx].s = c + c / 2;
players[p2_idx].t = d + d / 2;
players[p2_idx].loss_count++;
winners.push_back(p1_idx);
if (players[p2_idx].loss_count < m) losers.push_back(p2_idx);
} else {
// p2 獲勝
players[p2_idx].s = c + (a * b) / (2 * d);
players[p2_idx].t = d + (a * b) / (2 * c);
players[p1_idx].s = a + a / 2;
players[p1_idx].t = b + b / 2;
players[p1_idx].loss_count++;
winners.push_back(p2_idx);
if (players[p1_idx].loss_count < m) losers.push_back(p1_idx);
}
}
// 若人數為奇數,最後一人直接晉級
if (num_players % 2 == 1) {
winners.push_back(current_round.back());
}
// 將敗部尚可以參賽的人接到勝部後方
winners.insert(winners.end(), losers.begin(), losers.end());
current_round = winners;
}
cout << players[current_round[0]].id << endl;
return 0;
}