#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
const int MAGIC = 121;
const int mod = 1e9 + 9;
long long pw[N], pre[N];
char a[N];
struct SegmentTree {
  long long sum[N << 2];
  int flag[N << 2];
  int L, R, v;
  void init(int _L, int _R, int _v = 0) {
    L = _L;
    R = _R;
    v = _v;
  }
  void build(int l, int r, int o) {
    flag[o] = -1;
    if (l == r) {
      sum[o] = (a[l] - '0') * pw[l] % mod;
    } else {
      int m = l + r >> 1;
      build(l, m, o << 1);
      build(m + 1, r, o << 1 | 1);
      sum[o] = (sum[o << 1] + sum[o << 1 | 1]) % mod;
    }
  }
  inline void apply(int l, int r, int o, int v) {
    flag[o] = v;
    sum[o] = (pre[r] - pre[l - 1]) * v % mod;
    if (sum[o] < 0) {
      sum[o] += mod;
    }
  }
  void down(int l, int r, int o) {
    if (~flag[o]) {
      int m = l + r >> 1;
      apply(l, m, o << 1, flag[o]);
      apply(m + 1, r, o << 1 | 1, flag[o]);
      flag[o] = -1;
    }
  }
  void modify(int l, int r, int o) {
    if (L <= l && r <= R) {
      apply(l, r, o, v);
    } else {
      int m = l + r >> 1;
      down(l, r, o);
      if (L <= m) modify(l, m, o << 1);
      if (R > m) modify(m + 1, r, o << 1 | 1);
      sum[o] = (sum[o << 1] + sum[o << 1 | 1]) % mod;
    }
  }
  long long query(int l, int r, int o) {
    if (L <= l && r <= R) return sum[o];
    int m = l + r >> 1;
    long long ret = 0;
    down(l, r, o);
    if (L <= m) ret = query(l, m, o << 1);
    if (R > m) ret = (ret + query(m + 1, r, o << 1 | 1)) % mod;
    return ret;
  }
} Stree;
int main() {
  int n, q, op, l, r, d;
  scanf("%d%d%d", &n, &q, &l);
  q += l;
  pw[0] = 1;
  for (int i = 1; i <= n; i++) {
    pw[i] = pw[i - 1] * MAGIC % mod;
    pre[i] = (pre[i - 1] + pw[i]) % mod;
  }
  scanf("%s", a + 1);
  Stree.build(1, n, 1);
  while (q--) {
    scanf("%d%d%d%d", &op, &l, &r, &d);
    if (op == 1) {
      Stree.init(l, r, d);
      Stree.modify(1, n, 1);
    } else {
      bool can = true;
      if (can && r - l + 1 != d) {
        Stree.init(l, r - d);
        long long x1 = Stree.query(1, n, 1);
        Stree.init(l + d, r);
        long long x2 = Stree.query(1, n, 1);
        if (x1 * pw[d] % mod != x2) {
          can = false;
        }
      }
      puts(can ? "YES" : "NO");
    }
  }
  return 0;
}
