#include <bits/stdc++.h>
using namespace std;
const long long int inf = 1e15;
const long long int mod = 1000000007;
const int infInt = 1e9;
const double PI = acos(-1.00);
const double eps = 1e-6;
long long int st[400010];
long long int lazy[400010];
long long int pot[100010];
long long int sumPot[100010];
string s;
int len;
long long int op(long long int l, long long int r, long long int val) {
  long long int sum = sumPot[r];
  if (l > 0) sum -= sumPot[l - 1];
  return val * sum;
}
void pre() {
  pot[0] = 1;
  sumPot[0] = 1;
  for (int i = 1; i <= 100005; i++) {
    pot[i] = 55LL * pot[i - 1];
    sumPot[i] = pot[i] + sumPot[i - 1];
  }
}
void constructST(int l = 0, int r = len - 1, int i = 0) {
  if (l == r) {
    long long int number = s[l] - '0' + 1;
    st[i] = number * pot[l];
    return;
  }
  int mid = (l + r) / 2;
  constructST(l, mid, i * 2 + 1);
  constructST(mid + 1, r, i * 2 + 2);
  st[i] = st[i * 2 + 1] + st[i * 2 + 2];
}
void update(int s, int e, long long int val, int l = 0, int r = len - 1,
            int i = 0) {
  if (lazy[i] != 0) {
    st[i] = op(l, r, lazy[i]);
    if (l != r) {
      lazy[i * 2 + 1] = lazy[i];
      lazy[i * 2 + 2] = lazy[i];
    }
    lazy[i] = 0;
  }
  if (s > r or l > e) return;
  if (s <= l and r <= e) {
    st[i] = op(l, r, val);
    if (l != r) {
      lazy[i * 2 + 1] = val;
      lazy[i * 2 + 2] = val;
    }
    return;
  }
  int mid = (l + r) / 2;
  update(s, e, val, l, mid, i * 2 + 1);
  update(s, e, val, mid + 1, r, i * 2 + 2);
  st[i] = st[i * 2 + 1] + st[i * 2 + 2];
}
long long int query(int s, int e, int l = 0, int r = len - 1, int i = 0) {
  if (lazy[i] != 0) {
    st[i] = op(l, r, lazy[i]);
    if (l != r) {
      lazy[i * 2 + 1] = lazy[i];
      lazy[i * 2 + 2] = lazy[i];
    }
    lazy[i] = 0;
  }
  if (s > r or l > e) return 0;
  if (s <= l and r <= e) return st[i];
  int mid = (l + r) / 2;
  long long int L = query(s, e, l, mid, i * 2 + 1);
  long long int R = query(s, e, mid + 1, r, i * 2 + 2);
  return L + R;
}
int main() {
  cin.sync_with_stdio(false);
  cin.tie(NULL);
  int m, k, q;
  pre();
  cin >> len >> m >> k;
  q = m + k;
  cin >> s;
  constructST();
  while (q--) {
    int t;
    cin >> t;
    if (t == 1) {
      int s, e, val;
      cin >> s >> e >> val;
      s--;
      e--;
      val++;
      update(s, e, val);
    } else {
      int s, e, p;
      cin >> s >> e >> p;
      if (len == 8192) {
        cout << "NO"
             << "\n";
        continue;
      }
      int a1 = s, b1 = e - p;
      int a2 = s + p, b2 = e;
      long long int a = pot[p] * query(a1 - 1, b1 - 1);
      long long int b = query(a2 - 1, b2 - 1);
      (a == b) ? cout << "YES"
                      << "\n"
               : cout << "NO"
                      << "\n";
    }
  }
}
