#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int P = 31;
const int mod = 20020303;
int n, m, K, tt;
long long val[12][N], p[N];
char k[N];
struct kl {
  long long l, r, tg;
  long long va;
} s[N << 2];
inline void init() {
  p[0] = 1;
  for (int i = 1; i < N; i++) p[i] = p[i - 1] * P % mod;
  for (int i = 0; i < 10; i++)
    for (int j = 1; j < N; j++) val[i][j] = (val[i][j - 1] * P % mod + i) % mod;
}
inline void up(int now) {
  s[now].va =
      (s[now << 1].va * p[(s[now << 1 | 1].r - s[now << 1 | 1].l + 1)] % mod +
       s[now << 1 | 1].va % mod) %
      mod;
}
inline void down(int now) {
  if (s[now].tg == -1) return;
  int kp = s[now].tg;
  s[now << 1].va = val[kp][s[now << 1].r - s[now << 1].l + 1];
  s[now << 1 | 1].va = val[kp][s[now << 1 | 1].r - s[now << 1 | 1].l + 1];
  s[now << 1].tg = s[now << 1 | 1].tg = kp;
  s[now].tg = -1;
}
inline void build(int now, int l, int r) {
  s[now].l = l, s[now].r = r, s[now].tg = -1;
  if (l == r) {
    s[now].va = k[l] - '0';
    return;
  }
  int mid = (l + r) >> 1;
  build(now << 1, l, mid);
  build(now << 1 | 1, mid + 1, r);
  up(now);
}
inline void change(int now, int l, int r, int kp) {
  if (s[now].l == l && s[now].r == r) {
    s[now].tg = kp;
    s[now].va = val[kp][s[now].r - s[now].l + 1];
    return;
  }
  down(now);
  int mid = (s[now].l + s[now].r) >> 1;
  if (r <= mid)
    change(now << 1, l, r, kp);
  else if (l > mid)
    change(now << 1 | 1, l, r, kp);
  else
    change(now << 1, l, mid, kp), change(now << 1 | 1, mid + 1, r, kp);
  up(now);
}
inline long long query(int now, int l, int r) {
  if (s[now].l == l && s[now].r == r) return s[now].va;
  down(now);
  int mid = (s[now].l + s[now].r) >> 1;
  if (r <= mid)
    return query(now << 1, l, r);
  else if (l > mid)
    return query(now << 1 | 1, l, r);
  else
    return ((query(now << 1, l, mid) % mod) * p[r - mid] % mod +
            query(now << 1 | 1, mid + 1, r) % mod) %
           mod;
}
int main() {
  scanf("%d%d%d", &n, &m, &K);
  scanf("%s", k + 1);
  tt = m + K;
  init();
  build(1, 1, n);
  for (int opt, l, r, kp; tt; tt--) {
    scanf("%d%d%d%d", &opt, &l, &r, &kp);
    if (opt == 1)
      change(1, l, r, kp);
    else {
      if (kp == r - l + 1)
        puts("YES");
      else {
        if (query(1, l, r - kp) == query(1, l + kp, r))
          puts("YES");
        else
          puts("NO");
      }
    }
  }
  return 0;
}
