#include<stdio.h>
#include<iostream>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<functional>
#include<string>
#include<algorithm>
#include<time.h>
#include<bitset>
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template <class T> inline void gmin(T &a,T b){if(b<a)a=b;}
using namespace std;
const int N=1e5+10,M=0,Z=1e9+7,maxint=2147483647,ms31=522133279,ms63=1061109567,ms127=2139062143;const double eps=1e-8,PI=acos(-1.0);
int n,m,g;
const int W=13;
LL b[N],s[N];
struct A
{
int l,r;
int v,w;
}a[1<<18];
void pushup(int o)
{
a[o].v=(a[ls].v+a[rs].v)%Z;
}
void pushdown(int o)
{
if(~a[o].w)
{
a[ls].w=a[rs].w=a[o].w;
a[ls].v=(s[a[ls].r]-s[a[ls].l-1]+Z)*a[o].w%Z;
a[rs].v=(s[a[rs].r]-s[a[rs].l-1]+Z)*a[o].w%Z;
a[o].w=-1;
}
}
void build(int o,int l,int r)
{
a[o].l=l;
a[o].r=r;
a[o].w=-1;
if(l==r)
{
char ch;scanf("%c",&ch);
int x=ch-48;
a[o].v=x*b[l]%Z;
return;
}
int m=(l+r)>>1;
build(ls,l,m);
build(rs,m+1,r);
pushup(o);
}
void change(int o,int l,int r,int w)
{
if(a[o].l==l&&a[o].r==r)
{
a[o].w=w;
a[o].v=(s[r]-s[l-1]+Z)*w%Z;
return;
}
pushdown(o);
int m=(a[o].l+a[o].r)>>1;
if(r<=m)change(ls,l,r,w);
else if(l>m)change(rs,l,r,w);
else
{
change(ls,l,m,w);
change(rs,m+1,r,w);
}
pushup(o);
}
int check(int o,int l,int r)
{
if(a[o].l==l&&a[o].r==r)
{
return a[o].v;
}
pushdown(o);
int m=(a[o].l+a[o].r)>>1;
if(r<=m)return check(ls,l,r);
else if(l>m)return check(rs,l,r);
else return (check(ls,l,m)+check(rs,m+1,r))%Z;
}
int main()
{
b[0]=0;b[1]=1;for(int i=2;i<N;i++)b[i]=b[i-1]*W%Z;
s[0]=0;s[1]=1;for(int i=2;i<N;i++)s[i]=(s[i-1]+b[i])%Z;
while(~scanf("%d%d%d",&n,&m,&g))
{
getchar();
build(1,1,n);
m+=g;
while(m--)
{
int o,l,r,w;
scanf("%d%d%d%d",&o,&l,&r,&w);
if(o==1)change(1,l,r,w);
else
{
if(r-l<w)printf("YES\n");
else
{
int v1=check(1,l,r-w);v1=v1*b[w+1]%Z;
int v2=check(1,l+w,r);
if(v1==v2)printf("YES\n");
else printf("NO\n");
}
}
}
}
return 0;
}