#include <bits/stdc++.h>
const long long MOD = 1e9 + 7;
using namespace std;
int N, M, K, cmd, l, r, v;
long long IT[400010], lazy[400010], Pw[100010], sumPw[100010];
char S[100010];
long long get(int l, int r, int v) { return 1LL * v * sumPw[r - l] % MOD; }
void lazy_update(int k, int l, int r) {
  if (lazy[k] != -1) {
    if (l != r) {
      lazy[2 * k] = lazy[2 * k + 1] = lazy[k];
      int m = (l + r) / 2;
      IT[2 * k] = get(l, m, lazy[k]);
      IT[2 * k + 1] = get(m + 1, r, lazy[k]);
    }
    IT[k] = get(l, r, lazy[k]);
    lazy[k] = -1;
  }
}
void update(int k, int l, int r, int x, int y, int v) {
  if (y < l || r < x) return;
  if (x <= l && r <= y) {
    IT[k] = get(l, r, v);
    lazy[k] = v;
  } else {
    lazy_update(k, l, r);
    int m = (l + r) / 2;
    update(2 * k, l, m, x, y, v);
    update(2 * k + 1, m + 1, r, x, y, v);
    IT[k] = (IT[2 * k] * Pw[r - m] + IT[2 * k + 1]) % MOD;
  }
}
pair<long long, int> get(int k, int l, int r, int x, int y) {
  if (y < l || r < x || x > y) return make_pair(0, 0);
  if (x <= l && r <= y)
    return make_pair(IT[k], r - l + 1);
  else {
    lazy_update(k, l, r);
    int m = (l + r) / 2;
    pair<long long, int> p1 = get(2 * k, l, m, x, y);
    pair<long long, int> p2 = get(2 * k + 1, m + 1, r, x, y);
    return make_pair((p1.first * Pw[p2.second] + p2.first) % MOD,
                     p1.second + p2.second);
  }
}
int main() {
  scanf("%d %d %d\n%s", &N, &M, &K, S + 1);
  Pw[0] = sumPw[0] = 1;
  for (int i = 1; i <= N; i++) {
    Pw[i] = Pw[i - 1] * 1000007 % MOD;
    sumPw[i] = (sumPw[i - 1] + Pw[i]) % MOD;
  }
  memset(lazy, -1, sizeof lazy);
  for (int i = 1; i <= N; i++) update(1, 1, N, i, i, S[i] - '0');
  for (int i = M + K; i; i--) {
    scanf("%d %d %d %d", &cmd, &l, &r, &v);
    if (cmd == 1)
      update(1, 1, N, l, r, v);
    else {
      int p = (r - l + 1) % v;
      if (get(1, 1, N, l, r - p - v).first ==
              get(1, 1, N, l + v, r - p).first &&
          get(1, 1, N, r - p + 1, r).first ==
              get(1, 1, N, r - p + 1 - v, r - v).first)
        printf("YES\n");
      else
        printf("NO\n");
    }
  }
}
