#include <bits/stdc++.h>
using namespace std;
int n, k, m, x, l, r, c;
long long mod = 1000000007;
long long p[100000];
long long Sp[100001];
string s;
vector<long long> a;
vector<long long> t, t_m;
void fill_p();
void tpush(int v);
void build(int v, int tl, int tr);
long long tsum(int v, int tl, int tr, int l, int r);
void tset(int v, int tl, int tr, int l, int r, int x);
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m >> k >> s;
  fill_p();
  a.resize(n);
  for (int i = 0; i < n; ++i) a[i] = (int(1 + s[i] - '0') * p[i]) % mod;
  t.resize(4 * n);
  t_m.assign(4 * n, 0);
  build(1, 0, n - 1);
  for (int i = 0; i < m + k; ++i) {
    cin >> x >> l >> r >> c;
    --l;
    --r;
    if (x == 1)
      tset(1, 0, n - 1, l, r, c + 1);
    else
      cout << ((tsum(1, 0, n - 1, l, r - c) * p[c]) % mod ==
                       tsum(1, 0, n - 1, l + c, r)
                   ? "YES"
                   : "NO")
           << endl;
  }
  return 0;
}
void tpush(int v) {
  if (t_m[v] == 0) return;
  t_m[v + v] = t_m[v];
  t_m[v + v + 1] = t_m[v];
  t_m[v] = 0;
}
void build(int v, int tl, int tr) {
  if (tl == tr)
    t[v] = a[tl];
  else {
    int tm = (tl + tr) / 2;
    build(v + v, tl, tm);
    build(v + v + 1, tm + 1, tr);
    t[v] = (t[v + v] + t[v + v + 1]) % mod;
  }
}
long long tsum(int v, int tl, int tr, int l, int r) {
  if (l > r || l > tr) return 0;
  if (tl == l && tr == r)
    return (t_m[v] == 0 ? t[v] : ((Sp[r + 1] + mod - Sp[l]) * t_m[v]) % mod);
  else {
    tpush(v);
    int tm = (tl + tr) / 2;
    t[v] = tsum(v + v, tl, tm, tl, tm) +
           tsum(v + v + 1, tm + 1, tr, tm + 1, tr) % mod;
    return (tsum(v + v, tl, tm, l, min(r, tm)) +
            tsum(v + v + 1, tm + 1, tr, max(l, tm + 1), r)) %
           mod;
  }
}
void tset(int v, int tl, int tr, int l, int r, int x) {
  if (l > r || l > tr)
    ;
  else if (tl == l && tr == r)
    t_m[v] = x;
  else {
    tpush(v);
    int tm = (tl + tr) / 2;
    tset(v + v, tl, tm, l, min(r, tm), x);
    tset(v + v + 1, tm + 1, tr, max(l, tm + 1), r, x);
    t[v] = (tsum(v + v, tl, tm, tl, tm) +
            tsum(v + v + 1, tm + 1, tr, tm + 1, tr)) %
           mod;
  }
}
void fill_p() {
  p[0] = 1;
  for (int i = 1; i < 100000; ++i) p[i] = (p[i - 1] * 53) % mod;
  Sp[0] = 0;
  for (int i = 0; i < 100000; ++i) Sp[i + 1] = (Sp[i] + p[i]) % mod;
}
