#include <bits/stdc++.h>
using namespace std;
const unsigned long long MOD = 1e9 + 7;
const int INF = (int)2e9 + 7;
const long long LINF = (long long)1e18;
const unsigned long long mod1 = 183453789;
const unsigned long long mod2 = 1234567891;
const int P1 = 337, P2 = 263;
template <typename T>
T input() {
  T ans = 0, m = 1;
  char c = ' ';
  while (!((c >= '0' && c <= '9') || c == '-')) c = getchar();
  if (c == '-') m = -1, c = getchar();
  while (c >= '0' && c <= '9') ans = ans * 10 + (c - '0'), c = getchar();
  return ans * m;
}
string nextString(bool flag = false) {
  char ch;
  string ans = "";
  do {
    ch = getchar();
  } while (ch <= ' ');
  while (1) {
    ans += ch;
    ch = getchar();
    if ((!flag && ch <= ' ') || (flag && ch < ' ')) break;
  }
  return ans;
}
char nextChar() {
  char ch;
  do {
    ch = getchar();
  } while (ch <= ' ');
  return ch;
}
void read(string& s) { s = nextString(); }
void read(char& c) { c = nextChar(); }
template <typename T>
void read(T& a) {
  a = input<T>();
}
template <typename T, typename... R>
void read(T& a, R&... r) {
  read(a);
  read(r...);
}
const int N = 1e5 + 10;
char s[N];
int32_t main() {
  ios_base::sync_with_stdio(0);
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  scanf("%s", s);
  for (int i = 0; i < n; ++i) {
    s[i] -= '0';
  }
  m += k;
  while (m--) {
    int type, l, r, c;
    read(type, l, r, c);
    l--, r--;
    if (type == 1) {
      memset(s + l, c, r - l + 1);
    } else {
      bool ok = true;
      if (c < r - l + 1) {
        ok &= memcmp(s + l, s + l + c, r - l + 1 - c) == 0;
      }
      cout << (ok ? "YES\n" : "NO\n");
    }
  }
}
