#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> g[100100];
vector<int> G[100100];
vector<int> second[100100];
unordered_map<int, int> GG[100100];
pair<int, int> p[100100];
bitset<100100> v;
int go(int x) {
  v[x] = 1;
  int ret = 0;
  for (auto i : g[x]) {
    int u = i.first;
    if (v[u]) continue;
    int R = go(u);
    g[u][x] = R;
    g[x][u] = -R;
    ret += R;
  }
  return ret + 1;
}
vector<int> path;
vector<pair<double, int> > tos;
double Cross(pair<int, int> A, pair<int, int> B) {
  return (double)A.first * B.second - (double)A.second * B.first;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  int A, B;
  int lest, li = INT_MAX;
  for (int i = (0); i < (m); ++i) {
    scanf("%d%d", &(A), &(B));
    A--;
    B--;
    g[A][B] = 0;
    g[B][A] = 0;
  }
  for (int i = (0); i < (n); ++i) {
    scanf("%d%d", &(A), &(B));
    p[i] = pair<int, int>(A, B);
    if (A < li) {
      li = A;
      lest = i;
    }
  }
  p[n] = pair<int, int>(-21e8, 0);
  g[n][lest] = 0;
  g[lest][n] = 0;
  go(n);
  for (int i = (0); i < (n); ++i) {
    tos.clear();
    for (auto j : g[i]) {
      tos.push_back(make_pair(
          atan2(p[j.first].first - p[i].first, p[j.first].second - p[i].second),
          j.first));
    }
    sort((tos).begin(), (tos).end());
    for (int j = (0); j < (((int)(tos).size())); ++j) {
      G[i].push_back(tos[j].second);
      GG[i][tos[j].second] = j;
    }
    second[i].push_back(g[i][tos[0].second]);
    for (int j = (1); j < (((int)(tos).size())); ++j) {
      second[i].push_back(second[i][j - 1] + g[i][tos[j].second]);
    }
  }
  int(Q);
  scanf("%d", &Q);
  while (Q--) {
    path.clear();
    int(k);
    scanf("%d", &k);
    for (int i = (0); i < (k); ++i) {
      scanf("%d", &(A));
      A--;
      path.push_back(A);
    }
    path.push_back(path[0]);
    double s = 0;
    for (int i = (0); i < (k); ++i) {
      s += Cross(p[path[i]], p[path[i + 1]]);
    }
    if (s > 0) reverse((path).begin(), (path).end());
    path.push_back(path[1]);
    int ans = 0;
    for (int i = (1); i < (k + 1); ++i) {
      int U = path[i];
      int Li = GG[U][path[i - 1]], Ri = GG[U][path[i + 1]];
      if (Ri > Li)
        ans += second[U][Ri - 1] - second[U][Li];
      else {
        ans += second[U].back() - second[U][Li];
        if (Ri > 0) ans += second[U][Ri - 1];
      }
    }
    printf("%d\n", ans);
  }
  return 0;
}
