#include <bits/stdc++.h>
using namespace std;
struct P {
  int x, y, z;
  bool operator<(const P &a) const { return x > a.x; }
};
int a, b, c, i, k, o[10002], n, m, d, e, dy[15] = {0, 0, -1, 1, -1, 1, -1, 1},
                                         dx[15] = {-1, 1, 0, 0, 1, 1, -1, -1};
int l[51];
long long x, y, z, v1, v2;
P u[200600];
int j[60];
priority_queue<int> q[5], q1;
stack<int> s;
map<int, int> p;
string r, r1;
bool as(P a, P b) { return a.x - a.y > b.x - b.y; }
long long f(long long a, long long b) {
  if (a < b) swap(a, b);
  for (; b;) {
    long long h = b;
    b = a % b;
    a = h;
  }
  return a;
}
int main() {
  scanf("%d", &a);
  for (int t = 1; t <= a; t++) scanf("%d", &u[t].x);
  for (int t = 1; t <= a; q[u[t].y].push(-u[t].x), t++) scanf("%d", &u[t].y);
  for (int t = 1; t <= a; q[u[t].z].push(-u[t].x), t++) scanf("%d", &u[t].z);
  scanf("%d", &b);
  for (int t = 1; t <= b; t++) {
    scanf("%d", &c);
    for (; q[c].size() && p[-q[c].top()]; q[c].pop())
      ;
    if (q[c].size() == 0)
      printf("-1 ");
    else {
      p[-q[c].top()] = 1;
      printf("%d ", -q[c].top());
      q[c].pop();
    }
  }
}
