#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const double eps = 1e-9;
int n, m, q, qs, x, y, z, ans, rt;
vector<int> e[N], e2[N];
map<int, int> pos[N];
int si[N], fa[N], qu[N];
bool vi[N];
struct node {
  double ang;
  int sum;
};
vector<node> c[N];
struct nod {
  double x, y;
  nod(double _x = 0, double _y = 0) {
    x = _x;
    y = _y;
  }
  nod operator-(const nod &b) { return nod(x - b.x, y - b.y); }
} a[N];
double cross(nod a, nod b) { return a.x * b.y - a.y * b.x; }
double ang(nod a, nod b) { return atan2(a.y - b.y, a.x - b.x); }
bool cmp(node a, node b) { return a.ang < b.ang; }
void dfs(int x) {
  si[x] = 1;
  vi[x] = 1;
  for (int i : e[x])
    if (!vi[i]) {
      fa[i] = x;
      e2[x].push_back(i);
      dfs(i);
      si[x] += si[i];
    }
  qs = 0;
  for (int i : e2[x]) c[x].push_back((node){ang(a[i], a[x]), -si[i]});
  c[x].push_back((node){ang(a[fa[x]], a[x]), si[x]});
  sort(c[x].begin(), c[x].end(), cmp);
  for (int i = c[x].size() - 2, _e = 0; i >= _e; --i)
    c[x][i].sum += c[x][i + 1].sum;
}
int get(vector<node> &c, double x) {
  int pos = upper_bound(c.begin(), c.end(), (node){x, 0}, cmp) - c.begin();
  return pos == c.size() ? 0 : c[pos].sum;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, _e = m; i <= _e; ++i)
    scanf("%d%d", &x, &y), e[x].push_back(y), e[y].push_back(x);
  a[0].x = 1e9 + 5;
  for (int i = 1, _e = n; i <= _e; ++i) {
    scanf("%lf%lf", &a[i].x, &a[i].y);
    if (a[i].x < a[rt].x) rt = i;
  }
  a[0] = nod(-2e9, -2e9);
  dfs(rt);
  scanf("%d", &q);
  for (int o = 1, _e = q; o <= _e; ++o) {
    scanf("%d", &qs);
    for (int i = 1, _e = qs; i <= _e; ++i) scanf("%d", &qu[i]);
    double sum = 0;
    for (int i = 2, _e = qs - 1; i <= _e; ++i)
      sum += cross(a[qu[i]] - a[qu[1]], a[qu[i + 1]] - a[qu[1]]);
    if (sum < -eps) reverse(qu + 2, qu + qs + 1);
    qu[0] = qu[qs];
    qu[qs + 1] = qu[1];
    ans = 0;
    for (int i = 1, _e = qs; i <= _e; ++i) {
      double x = ang(a[qu[i - 1]], a[qu[i]]), y = ang(a[qu[i + 1]], a[qu[i]]);
      int z = qu[i];
      if (x < y)
        ans += get(c[z], x + eps) - get(c[z], y - eps);
      else
        ans += c[z][0].sum - (get(c[z], y - eps) - get(c[z], x + eps));
    }
    printf("%d\n", ans);
  }
}
