#include <bits/stdc++.h>
#define rep(i, x, y) for (int i = (x), _ = (y); i <= _; ++i)
#define down(i, x, y) for (int i = (x) - 1, _ = (y); i >= _; --i)
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define bin(x) (1<<(x))
//#define LX_JUDGE
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
template<typename T> inline void upmax(T &x, T y) { x < y ? x = y : 0; }
template<typename T> inline void upmin(T &x, T y) { x > y ? x = y : 0; }
template<typename T> inline void read(T &x) {
char c;
while ((c = getchar()) < '0' or c > '9');
for (x = c - '0'; (c = getchar()) >= '0' and c <= '9'; x = x * 10 + c - '0');
}
const int inf = 0x3f3f3f3f;
const int MAX_N = 2500;
struct Data {
int u, d, id;
Data() {}
Data(int u, int d, int id) : u(u), d(d), id(id) {}
};
class SegmentTree {
map<pii, int> G;
int n, pcnt;
vector<Data> H[MAX_N * 4 + 255];
#define ls (o << 1)
#define rs (o << 1 | 1)
int _l, _r, _u, _d, _id;
void ins(int o, int l, int r) {
if (_l <= l and r <= _r) {
//printf("%d %d %d %d\n", l, r, _u, _d);
H[o].pb(Data(_u, _d, _id));
return ;
}
int m = (l + r) / 2;
if (_l <= m) ins(ls, l, m);
if (m < _r) ins(rs, m + 1, r);
}
void del(int o, int l, int r) {
if (_l <= l and r <= _r) {
for (vector<Data>::iterator it = H[o].begin(); it != H[o].end(); it++) {
if (it->id == _id) {
H[o].erase(it);
break ;
}
}
return ;
}
int m = (l + r) / 2;
if (_l <= m) del(ls, l, m);
if (m < _r) del(rs, m + 1, r);
}
inline int _ask(const vector<Data> &q, int h) {
int best = inf, ans = -1;
for (auto to : q) {
if (to.u <= h and h <= to.d and to.d - to.u < best) {
best = to.d - to.u;
ans = to.id;
}
}
return ans;
}
int ask(int o, int l, int r) {
if (l == r) return _ask(H[o], _u);
int m = (l + r) / 2;
int ans = m >= _l ? ask(ls, l, m) : ask(rs, m + 1, r);
return ans < 0 ? _ask(H[o], _u) : ans;
}
#undef ls
#undef rs
public :
void init(int n) {
this->n = n;
pcnt = 1;
}
void ins(int l, int u, int r, int d) {
G[mp(l, u)] = _id = pcnt++;
_l = l, _r = r, _u = u, _d = d;
ins(1, 1, n);
}
void del(int l, int u, int r, int d) {
_id = G[mp(l, u)];
G.erase(mp(l, u));
_l = l, _r = r;
del(1, 1, n);
}
int ask(int x, int y) {
_l = x, _u = y;
return ask(1, 1, n);
}
} my;
int main() {
int n, m, Q;
read(n), read(m), read(Q);
my.init(2500); // FIX ME
int opt, r1, c1, r2, c2;
while (Q--) {
read(opt), read(r1), read(c1), read(r2), read(c2);
if (opt == 3) {
//int a = my.ask(r1, c1), b = my.ask(r2, c2);
//printf("%d %d\n", a, b);
puts(my.ask(r1, c1) == my.ask(r2, c2) ? "Yes" : "No");
} else if (opt == 1) {
my.ins(r1, c1, r2, c2);
} else {
my.del(r1, c1, r2, c2);
}
}
return 0;
}