#include <bits/stdc++.h>
using namespace std;
unordered_set<int> g[50010], heavy[50010];
bool on[50010];
int ans[50010];
void online(int u) {
  on[u] = 1;
  if (g[u].size() >= 700) {
    return;
  } else {
    for (auto &v : g[u]) {
      ++ans[v];
    }
  }
}
void offline(int u) {
  on[u] = 0;
  if (g[u].size() >= 700) {
    return;
  } else {
    for (auto &v : g[u]) {
      --ans[v];
    }
  }
}
int query(int u) {
  int y = ans[u];
  for (auto &v : heavy[u]) {
    if (on[v]) ++y;
  }
  return y;
}
void add_friend(int u, int v1) {
  if (g[u].size() == 700 - 1) {
    for (auto &v : g[u]) {
      if (on[u]) --ans[v];
      heavy[v].insert(u);
    }
  }
  g[u].insert(v1);
  if (g[u].size() >= 700) {
    heavy[v1].insert(u);
    return;
  } else {
    if (on[u]) ++ans[v1];
  }
}
void del_friend(int u, int v1) {
  if (g[u].size() == 700) {
    for (auto &v : g[u]) {
      if (on[u]) ++ans[v];
      heavy[v].erase(u);
    }
  }
  g[u].erase(v1);
  if (g[u].size() >= 700) {
    heavy[v1].erase(u);
    return;
  } else {
    if (on[u]) --ans[v1];
  }
}
int main() {
  int n, m, q, o, u, a, b;
  char typ;
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &q);
  scanf("%d", &o);
  while (o--) {
    scanf("%d", &u);
    online(u);
  }
  while (m--) {
    scanf("%d", &a);
    scanf("%d", &b);
    add_friend(a, b);
    add_friend(b, a);
  }
  while (q--) {
    scanf(" %c", &typ);
    if (typ == 'O') {
      scanf("%d", &a);
      online(a);
    } else if (typ == 'F') {
      scanf("%d", &a);
      offline(a);
    } else if (typ == 'A') {
      scanf("%d", &a);
      scanf("%d", &b);
      add_friend(a, b);
      add_friend(b, a);
    } else if (typ == 'D') {
      scanf("%d", &a);
      scanf("%d", &b);
      del_friend(a, b);
      del_friend(b, a);
    } else {
      scanf("%d", &a);
      printf("%d\n", query(a));
    }
  }
  return 0;
}
