#include <bits/stdc++.h>
using namespace std;
long long const MAXN = 1e5 + 8;
long long const INF = 1e12 + 8;
long long const delta = 179424937;
long long const BASE = 17;
long long seg[4 * MAXN];
long long lazy[4 * MAXN];
long long pw[MAXN];
long long word[MAXN][12];
string ss;
void build(long long n, long long l, long long r) {
  if (l > r) return;
  if (l == r) {
    seg[n] = ss[l - 1] - '0' + 1;
  } else {
    long long mid = (l + r) / 2;
    build(2 * n, l, mid);
    build(2 * n + 1, mid + 1, r);
    seg[n] = ((pw[r - mid] * seg[2 * n]) % delta) + seg[2 * n + 1];
    seg[n] %= delta;
  }
}
void shift(long long n, long long l, long long r) {
  if (l > r) return;
  if (lazy[n] == -1) return;
  long long temp = 0;
  seg[n] = word[r - l + 1][lazy[n]];
  if (l != r) {
    lazy[2 * n] = lazy[n];
    lazy[2 * n + 1] = lazy[n];
  }
  lazy[n] = -1;
}
void update(long long n, long long st, long long en, long long l, long long r,
            long long x) {
  shift(n, st, en);
  if (l > r || en < l || st > r) return;
  if (st >= l && en <= r) {
    seg[n] = word[en - st + 1][x];
    if (st != en) {
      lazy[2 * n] = x;
      lazy[2 * n + 1] = x;
    }
  } else {
    long long mid = (st + en) / 2;
    update(2 * n, st, mid, l, r, x);
    update(2 * n + 1, mid + 1, en, l, r, x);
    seg[n] = ((seg[2 * n] * pw[en - mid]) % delta) + seg[2 * n + 1];
    seg[n] %= delta;
  }
}
long long get(long long n, long long st, long long en, long long l,
              long long r) {
  shift(n, st, en);
  if (l > r || en < l || st > r) return 0;
  if (st >= l && en <= r) {
    return seg[n] * pw[r - en];
  }
  long long mid = (st + en) / 2;
  long long a1 = get(2 * n, st, mid, l, r);
  long long a2 = get(2 * n + 1, mid + 1, en, l, r);
  if (a1 == -1) return a2;
  if (a2 == -1) return a1;
  return ((a1 + a2) % delta);
}
int main() {
  std::ios::sync_with_stdio(0);
  ;
  cin.tie(0);
  cout.tie(0);
  long long n, m, k;
  cin >> n >> m >> k;
  for (long long i = 0; i < 4 * MAXN; i++) lazy[i] = -1;
  pw[0] = 1;
  for (long long i = 1; i < MAXN; i++) {
    pw[i] = BASE * pw[i - 1];
    pw[i] %= delta;
  }
  for (long long i = 0; i < 12; i++) {
    for (long long j = 1; j < MAXN; j++) {
      word[j][i] = (i + 1) + ((word[j - 1][i] * BASE) % delta);
      word[j][i] %= delta;
    }
  }
  cin >> ss;
  build(1, 1, n);
  long long t;
  long long f, s, w;
  for (long long i = 0; i < m + k; i++) {
    cin >> t >> f >> s >> w;
    if (t == 1) {
      update(1, 1, n, f, s, w);
    } else {
      long long a11 = get(1, 1, n, f + w, s);
      long long a22 = get(1, 1, n, f, s - w);
      if (a11 == a22)
        cout << "YES" << endl;
      else
        cout << "NO" << endl;
    }
  }
  return 0;
}
