#include <bits/stdc++.h>

const int Mod=1e9+7,N=3e3+10;

int n,m,dp[N][N],summ[N];
char s[N];

void Init() {
	scanf("%d%d",&n,&m);
	scanf("%s",s+1);
	for (int i=1;i<=n;++i) summ[i]=summ[i-1]+(s[i]=='0'); 
}

void Solve() {
	int nowr=0,l,r,cnt=0;
	scanf("%d%d",&l,&r); ++cnt;
	dp[0][0]=1;
	for (int i=0;i<n;++i) {
		int sum=0; 
		while (i+1==l && cnt<=m) {
			if (r>nowr) sum+=summ[r]-summ[nowr],nowr=r;
			if (cnt<m) { scanf("%d%d",&l,&r); ++cnt; }
			else break; 
		}
		if (nowr>i){
			for (int j=0;j<=nowr-i;++j) {
				if (j+sum) dp[i+1][j+sum-1]=(dp[i+1][j+sum-1]+dp[i][j])%Mod;
				if (nowr-i-j-sum) dp[i+1][j+sum]=(dp[i+1][j+sum]+dp[i][j])%Mod; 
			}
		}else dp[i+1][0]=dp[i][0],nowr=i+1;
	}
	printf("%d\n",dp[n][0]);
} 

int main() {
	Init();
	Solve();
	return 0;
}