#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, B = 51, M = 1e9 + 7;
int cum[N], pw[N], seg[N << 2], lazy[N << 2];
string in;
int zabat(long long x) { return ((x % M) + M) % M; }
void build(int p, int s, int e) {
  if (s == e) return void(seg[p] = (in[s] - '0') + 1);
  int m = s + e >> 1, a = p << 1, b = a | 1;
  build(a, s, m);
  build(b, m + 1, e);
  seg[p] = zabat(zabat(1LL * seg[a] * pw[e - m]) + seg[b]);
}
void check(int p, int s, int e) {
  if (~lazy[p]) {
    seg[p] = zabat(1LL * lazy[p] * cum[e - s]);
    if (s != e) lazy[p << 1] = lazy[p << 1 | 1] = lazy[p];
    lazy[p] = -1;
  }
}
void update(int p, int s, int e, int l, int r, int val) {
  check(p, s, e);
  if (s > r || e < l) return;
  if (s >= l && e <= r) {
    lazy[p] = val;
    check(p, s, e);
    return;
  }
  int m = s + e >> 1, a = p << 1, b = a | 1;
  update(a, s, m, l, r, val);
  update(b, m + 1, e, l, r, val);
  seg[p] = zabat(zabat(1LL * seg[a] * pw[e - m]) + seg[b]);
}
int n;
void query(int p, int s, int e, int l, int r, int &ans) {
  if (r >= n || r < l) return void(ans = -1);
  check(p, s, e);
  if (s > r || e < l) return;
  if (s >= l && e <= r) {
    ans = zabat(zabat(1LL * ans * pw[e - s + 1]) + seg[p]);
    return;
  }
  int m = s + e >> 1, a = p << 1, b = a | 1;
  query(a, s, m, l, r, ans);
  query(b, m + 1, e, l, r, ans);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cum[0] = pw[0] = 1;
  for (int i = 1; i < N; ++i) {
    pw[i] = zabat(1LL * pw[i - 1] * B);
    cum[i] = zabat(cum[i - 1] + pw[i]);
  }
  int m, k;
  cin >> n >> m >> k >> in;
  build(1, 0, n - 1);
  memset(lazy, -1, sizeof(lazy));
  int q = m + k;
  while (q--) {
    int t, l, r, d;
    cin >> t >> l >> r >> d;
    --l, --r;
    if (t == 1)
      update(1, 0, n - 1, l, r, d + 1);
    else {
      if (l == r)
        cout << "YES";
      else {
        int ans1 = 0, ans2 = 0;
        query(1, 0, n - 1, l, r - d, ans1);
        query(1, 0, n - 1, l + d, r, ans2);
        cout << (ans1 == ans2 ? "YES" : "NO");
      }
      cout << '\n';
    }
  }
  return 0;
}
