#include <bits/stdc++.h>
using namespace std;
struct yy {
  int id, val;
} f[8000];
int a[8000], p[8000][2], d[8000];
bool b[8000];
bool cmp(yy x, yy y) { return x.val > y.val; }
int main() {
  int i, j, n, m, t, x;
  bool tm;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= 2 * n; ++i) {
    scanf("%d", &f[i].val);
    f[i].id = i;
    a[i] = f[i].val;
  }
  sort(f + 1, f + 1 + 2 * n, cmp);
  for (i = 1; i <= m; ++i) {
    scanf("%d%d", &p[i][0], &p[i][1]);
    d[p[i][0]] = p[i][1];
    d[p[i][1]] = p[i][0];
  }
  scanf("%d", &t);
  if (t == 1) {
    for (i = 1; i <= m; ++i) {
      if (a[p[i][0]] > a[p[i][1]]) {
        printf("%d\n", p[i][0]);
        fflush(stdout);
        b[p[i][0]] = 1;
      } else {
        printf("%d\n", p[i][1]);
        fflush(stdout);
        b[p[i][1]] = 1;
      }
      scanf("%d", &x);
      b[x] = 1;
    }
    for (i = 1; i <= 2 * n; ++i) {
      if (!b[f[i].id]) {
        printf("%d\n", f[i].id);
        fflush(stdout);
        b[f[i].id] = 1;
        scanf("%d", &x);
        b[x] = 1;
      }
    }
  } else {
    for (i = 1; i <= n; ++i) {
      scanf("%d", &x);
      b[x] = 1;
      if (d[x] && !b[d[x]]) {
        printf("%d\n", d[x]);
        fflush(stdout);
        b[d[x]] = 1;
      } else {
        tm = 0;
        for (j = 1; j <= m; ++j)
          if (!b[p[j][0]]) {
            if (a[p[j][0]] > a[p[j][1]]) {
              printf("%d\n", p[j][0]);
              fflush(stdout);
              b[p[j][0]] = 1;
              tm = 1;
              break;
            } else {
              printf("%d\n", p[j][1]);
              fflush(stdout);
              b[p[j][1]] = 1;
              tm = 1;
              break;
            }
          }
        if (!tm)
          for (j = 1; j <= 2 * n; ++j)
            if (!b[f[j].id]) {
              printf("%d\n", f[j].id);
              fflush(stdout);
              b[f[j].id] = 1;
              break;
            }
      }
    }
  }
  return 0;
}
