#include<cstdio>
#include<algorithm>
#pragma G++ optimize (3)
#pragma C++ optimize (3)
using namespace std;
const int N = 2e5 + 50;
int n, m, k, tot;
int a[N], b[N], c[N];
int lang[3 * N], uni[3 * N],ans[3 * N];
//3*N是因为语言的来源有3个地方,假设都不相同,则有3*N种不同的语言
int ans0, t1, t2;
int find(int x)
{
int l=1,r=k;
while(l<r)
{
int mid=(l+r)/2;
if(uni[mid]>=x)r=mid;
else
l=mid+1;
}
return l;
}
//find函数用二分法找到目标数在离散化后的数组中的下标位置
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
lang[++tot] = a[i];
}
scanf("%d", &m);
for (int i = 1; i <= m; i++)
{
scanf("%d", &b[i]);
lang[++tot] = b[i];
}
for (int i = 1; i <= m; i++)
{
scanf("%d", &c[i]);
lang[++tot] = c[i];
}
//分别记录三个数组里的语言情况,并用lang记录
sort(lang + 1, lang + 1 + tot);
for (int i = 1; i <= tot; i++)
{
if (i == 1 || lang[i] != lang[i - 1])
uni[++k] = lang[i];
}
//去重操作
for (int i = 1; i <= n; i++)ans[find(a[i])]++;//下标为a[i]离散化后在uni数组中的下标
//记录各个语言出现的次数
for (int i = 1; i <= m; i++)
{
int x = ans[find(b[i])], y = ans[find(c[i])];
if (x > t1 || (x == t1 && y > t2))
{
ans0 = i, t1 = x, t2 = y;
}
}
//通过查找当前电影的语音语言和字母语言的个数来答案下标的更新
if (ans0 == 0)
{
printf("%d\n",1);
}
//这里需要一个特判,如果科学家的语言种类与电影的语言没有交集则任意输出电影
else
printf("%d\n",ans0);
}