#include <bits/stdc++.h>
using namespace std;
const int b = 233;
const int N = 1e5 + 50;
const int mod = 1e9 + 9;
char s[N];
int n, m, opt, k, l, r;
long long Pow[N], Pow2[N];
struct Kano {
  int l, r, lazy;
  long long h;
} kano[N * 6];
void pushup(int x) {
  kano[x].h =
      ((kano[x << 1].h * Pow[kano[x << 1 | 1].r - kano[x << 1 | 1].l + 1] +
        kano[x << 1 | 1].h) %
           mod +
       mod) %
      mod;
}
void pushdown(int x) {
  if (kano[x].lazy + 1) {
    kano[x << 1].lazy = kano[x << 1 | 1].lazy = kano[x].lazy;
    kano[x << 1].h = Pow2[kano[x << 1].r - kano[x << 1].l] * kano[x].lazy % mod;
    kano[x << 1 | 1].h =
        Pow2[kano[x << 1 | 1].r - kano[x << 1 | 1].l] * kano[x].lazy % mod;
    kano[x].lazy = -1;
  }
  return;
}
void build(int x, int l, int r) {
  kano[x].l = l;
  kano[x].r = r;
  kano[x].lazy = -1;
  if (l == r) {
    kano[x].h = s[l] - '0' + 1;
    return;
  }
  int mid = (kano[x].l + kano[x].r) >> 1;
  build(x << 1, l, mid), build(x << 1 | 1, mid + 1, r);
  pushup(x);
}
void add(int x, int l, int r, int a) {
  if (kano[x].l == l && kano[x].r == r) {
    kano[x].lazy = a;
    kano[x].h = Pow2[kano[x].r - kano[x].l] * a % mod;
    return;
  }
  pushdown(x);
  int mid = (kano[x].l + kano[x].r) >> 1;
  if (mid >= r)
    add(x << 1, l, r, a);
  else if (mid < l)
    add(x << 1 | 1, l, r, a);
  else
    add(x << 1, l, mid, a), add(x << 1 | 1, mid + 1, r, a);
  pushup(x);
}
long long query(int x, int l, int r) {
  if (l > r) return 0;
  if (kano[x].l == l && kano[x].r == r) return kano[x].h;
  pushdown(x);
  int mid = (kano[x].l + kano[x].r) >> 1;
  if (mid >= r)
    return query(x << 1, l, r);
  else if (mid < l)
    return query(x << 1 | 1, l, r);
  else
    return (query(x << 1, l, mid) * Pow[r - mid] +
            query(x << 1 | 1, mid + 1, r)) %
           mod;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  m += k;
  scanf("%s", s + 1);
  Pow[0] = Pow2[0] = 1;
  for (int i = 1; i <= n; i++)
    Pow[i] = Pow[i - 1] * b % mod, Pow2[i] = (Pow2[i - 1] * b + 1) % mod;
  build(1, 1, n);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d%d", &opt, &l, &r, &k);
    if (opt == 1)
      add(1, l, r, k + 1);
    else
      printf("%s\n", query(1, l, r - k) == query(1, l + k, r) ? "YES" : "NO");
  }
}
