#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5 + 100;
int n, m, q;
int head[maxn], cnt;
struct E {
int u, v, last;
}e[maxn<<2];
int d[maxn];
void add(int u, int v) {
e[++cnt].u = u;
e[cnt].v = v;
e[cnt].last = head[u];
head[u] = cnt;
}
bool broken[maxn<<2];
signed main() {
cin >> n >> m;
int u, v;
while(m--) {
cin >> u >> v;
add(u, v); d[u]++;
}
cin >> q;int op;
while(q--) {
cin >> op;
if(op == 1) {
cin >> u >> v;
for(int i = head[u]; i; i = e[i].last)
if(e[i].u == u && e[i].v == v) {
broken[i] = 1, d[u]--;
break;
}
}
if(op == 2) {
cin >> u;
for(int i = head[u]; i; i = e[i].last) {
if(!broken[i]) {
d[u]--;
broken[i] = 1;
}
}
}
if(op == 3) {
cin >> u >> v;
for(int i = head[u]; i; i = e[i].last) {
if(e[i].u == u && e[i].v == v) {
broken[i] = 0;
d[u]++;
cout << "wdfa" << endl;
}
}
}
if(op == 4) {
cin >> u;
for(int i = head[u]; i; i = e[i].last) {
if(broken[i]) {
broken[i] = 0;
d[u]++;
}
}
}
bool f = 1;
for(int i = 1; i <= n; i++) {
if(d[i] != 1) {
cout << "NO" << endl;
f = 0;
break;
}
}
if(f) cout << "YES" << endl;
}
return 0;
}