#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
template <class T>
inline T bigMod(T p, T e, T M) {
  T ret = 1;
  for (; e > 0; e >>= 1) {
    if (e & 1) ret = (ret * p) % M;
    p = (p * p) % M;
  }
  return (T)ret;
}
template <class T>
inline T modInverse(T a, T M) {
  return bigMod(a, M - 2, M);
}
template <class T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <class T>
inline T lcm(T a, T b) {
  a = abs(a);
  b = abs(b);
  return (a / gcd(a, b)) * b;
}
template <class T>
inline string int2String(T a) {
  ostringstream str;
  str << a;
  return str.str();
}
const int dr[] = {0, 1, 0, -1, -1, 1, 1, -1, -2, -2, 2, 2, -1, -1, 1, 1};
const int dc[] = {1, 0, -1, 0, 1, 1, -1, -1, -1, 1, -1, 1, -2, 2, -2, 2};
const int maxn = 5e4 + 10;
bool status[maxn];
int res[maxn];
vector<int> f[maxn];
inline void add(int x, int y) {
  if (f[x].size() > f[y].size()) swap(x, y);
  f[x].push_back(y);
  res[y] += status[x];
}
inline void del(const int& x, const int& y) {
  for (int i = int(0); i < int(f[x].size()); ++i) {
    if (f[x][i] == y) {
      f[x][i] = f[x].back();
      f[x].pop_back();
      res[y] -= status[x];
      return;
    }
  }
  for (int i = int(0); i < int(f[y].size()); ++i) {
    if (f[y][i] == x) {
      f[y][i] = f[y].back();
      f[y].pop_back();
      res[x] -= status[y];
      return;
    }
  }
}
int main() {
  char ch[10];
  int n, m, q;
  scanf("%d%d%d", &n, &m, &q);
  int o, x, y;
  scanf("%d", &o);
  while (o--) scanf("%d", &x), status[x] = 1;
  while (m--) scanf("%d%d", &x, &y), add(x, y);
  while (q--) {
    scanf("%s%d", ch, &x);
    if (ch[0] == 'O') {
      status[x] = 1;
      for (const int& j : f[x]) ++res[j];
    } else if (ch[0] == 'F') {
      status[x] = 0;
      for (const int& j : f[x]) --res[j];
    } else if (ch[0] == 'A') {
      scanf("%d", &y);
      add(x, y);
    } else if (ch[0] == 'D') {
      scanf("%d", &y);
      del(x, y);
    } else {
      int ans = res[x];
      for (const int& j : f[x]) ans += status[j];
      printf("%d\n", ans);
    }
  }
  return 0;
}
