#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int M = 1000;
const int inf = 1e9 + 7;
const int oth = 1e9 + 9;
const long long base = 1e18;
const double pi = acos(-1);
const double ep = 1e-9;
long long f[N], D[N];
long long F[N], d[N];
long long a1[N * 4], a2[N * 4];
int b[N * 4];
void init() {
  f[0] = d[0] = 1;
  D[0] = F[0] = 1;
  for (int i = (int)1; i < (int)N; i++) {
    f[i] = (f[i - 1] * 10) % inf;
    d[i] = (d[i - 1] * 10) % oth;
    F[i] = (F[i - 1] + f[i]) % inf;
    D[i] = (D[i - 1] + d[i]) % oth;
  }
}
void up(int i, int l, int r, int c) {
  a1[i] = (c * F[r - l]) % inf;
  a2[i] = (c * D[r - l]) % oth;
  b[i] = c + 1;
}
void update(int i, int l, int r, int u, int v, int c) {
  if (l == u && r == v) {
    up(i, l, r, c);
    return;
  }
  int g = (l + r) >> 1, next = i << 1;
  if (b[i] > 0) {
    up(next, l, g, b[i] - 1);
    up(next + 1, g + 1, r, b[i] - 1);
    b[i] = 0;
  }
  if (u <= g) update(next, l, g, u, min(g, v), c);
  if (g < v) update(next + 1, g + 1, r, max(g + 1, u), v, c);
  a1[i] = (a1[next] * f[r - g] + a1[next + 1]) % inf;
  a2[i] = (a2[next] * d[r - g] + a2[next + 1]) % oth;
}
long long kq1, kq2;
int lef;
void get(int i, int l, int r, int u, int v) {
  if (l == u && r == v) {
    kq1 = (kq1 + a1[i] * f[lef - r]) % inf;
    kq2 = (kq2 + a2[i] * d[lef - r]) % oth;
    return;
  }
  int g = (l + r) >> 1, next = i << 1;
  if (b[i] > 0) {
    up(next, l, g, b[i] - 1);
    up(next + 1, g + 1, r, b[i] - 1);
    b[i] = 0;
  }
  if (u <= g) get(next, l, g, u, min(g, v));
  if (g < v) get(next + 1, g + 1, r, max(u, g + 1), v);
  a1[i] = (a1[next] * f[r - g] + a1[next + 1]) % inf;
  a2[i] = (a2[next] * d[r - g] + a2[next + 1]) % oth;
}
int n, m, k;
string s;
int main() {
  cin >> n >> m >> k;
  cin >> s;
  init();
  for (int j = (int)0; j < (int)s.size(); j++) {
    update(1, 1, n, j + 1, j + 1, s[j] - '0');
  }
  for (int t = (int)0; t < (int)m + k; t++) {
    int c, u, v, x;
    scanf("%d%d%d%d", &c, &u, &v, &x);
    if (c == 1) {
      update(1, 1, n, u, v, x);
    } else {
      kq1 = kq2 = 0;
      if (x == v - u + 1) {
        printf("YES\n");
        continue;
      }
      lef = v - x;
      get(1, 1, n, u, v - x);
      long long tmp1 = kq1, tmp2 = kq2;
      kq1 = 0;
      kq2 = 0;
      lef = v;
      get(1, 1, n, u + x, v);
      if (tmp1 == kq1 && tmp2 == kq2) {
        puts("YES");
      } else
        puts("NO");
    }
  }
}
