#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 9, base = 10;
const int N = 1e5 + 5;
int hsh[N << 2], laz[N << 2], pwr[N];
string str;
vector<int> sv[N];
int n, m, k;
void build(int node, int s, int e) {
  laz[node] = -1;
  if (s == e) {
    hsh[node] = (str[s] - '0');
    return;
  }
  int md = (s + e) >> 1;
  build(node << 1, s, md);
  build(node << 1 | 1, md + 1, e);
  hsh[node] =
      (hsh[node << 1] * 1ll * pwr[e - md] % mod + hsh[node << 1 | 1]) % mod;
}
void push(int node, int s, int e) {
  if (~laz[node]) {
    hsh[node] = sv[1][e - s] * 1ll * laz[node] % mod;
    if (s != e) {
      laz[node << 1] = laz[node];
      laz[node << 1 | 1] = laz[node];
    }
    laz[node] = -1;
  }
}
void upd(int node, int s, int e, int l, int r, int v) {
  push(node, s, e);
  if (r < s || e < l || l > r) return;
  if (l <= s && e <= r) {
    laz[node] = v;
    push(node, s, e);
    return;
  }
  int md = (s + e) >> 1;
  upd(node << 1, s, md, l, r, v);
  upd(node << 1 | 1, md + 1, e, l, r, v);
  hsh[node] =
      (hsh[node << 1] * 1ll * pwr[e - md] % mod + hsh[node << 1 | 1]) % mod;
}
void qry(int node, int s, int e, int l, int r, int &ans) {
  push(node, s, e);
  if (r < s || e < l || l > r) return;
  if (l <= s && e <= r) {
    ans = (ans * 1ll * pwr[e - s + 1] % mod + hsh[node]) % mod;
    return;
  }
  int md = (s + e) >> 1;
  qry(node << 1, s, md, l, r, ans);
  qry(node << 1 | 1, md + 1, e, l, r, ans);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  pwr[0] = 1;
  for (int i = 1; i < N; i++) pwr[i] = (pwr[i - 1] * 1ll * 10) % mod;
  for (int i = 1; i < N; i++) {
    sv[i].resize(N / i + 3);
    sv[i][0] = 1;
    for (int j = 1; j * i < N; j++)
      sv[i][j] = (sv[i][j - 1] + pwr[i * j]) % mod;
  }
  cin >> n >> m >> k;
  cin >> str;
  m += k;
  build(1, 0, n - 1);
  int x = 0;
  while (m--) {
    int tp;
    cin >> tp;
    if (tp == 1) {
      int l, r, v;
      cin >> l >> r >> v;
      --l, --r;
      upd(1, 0, n - 1, l, r, v);
    } else {
      int l, r, d;
      cin >> l >> r >> d;
      --l, --r;
      int small = 0;
      qry(1, 0, n - 1, l, l + (d - 1), small);
      int to = (r - l + 1) / d;
      small = small * 1ll * sv[d][to - 1] % mod;
      int tmp = 0;
      int o = ((r - l + 1) - to * d);
      qry(1, 0, n - 1, l, l + o - 1, tmp);
      small = small * 1ll * pwr[o] % mod + tmp;
      small %= mod;
      int big = 0;
      qry(1, 0, n - 1, l, r, big);
      if (small == big)
        cout << "YES\n";
      else
        cout << "NO\n";
    }
  }
  return 0;
}
