#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define lol(i,n) for(int i=0;i<n;i++)
#define mod 1000000007
#define pb push
#define mp make_pair
#define X first
#define Y second
#define Mad(a,b) a=(a+b)%mod;
typedef long long ll;

using namespace std;
typedef pair<ll,ll> P;
queue<P> Q;
#define N 3010
ll n,m,d[N],c[N];string s;
int main(){
    cin>>n>>m>>s;
    Q.pb(mp(0,0));
    while(m--){
	ll a,b;cin>>a>>b;
	if(Q.back().Y<b)Q.pb(mp(a,b));
    }
    lol(i,N)d[i]=0;d[0]=1;
    for(ll i=0,rnd=0,bef=0;i<=n;i++){
	ll cnt=0;
	while(!Q.empty()){
	    if(not(Q.front().X<=i))break;
	    rnd=Q.front().Y;
	    for(ll j=max(i-1,bef);j<rnd;j++)cnt+=s[j]-'0';
	    bef=rnd;Q.pop();
	}
	//lol(j,10)cout<<d[j]<<" ";cout<<endl;
	lol(j,N)c[j]=0;
	lol(j,N-cnt)c[j+cnt]=d[j];
	lol(j,N)d[j]=c[j];
	//lol(j,10)cout<<d[j]<<" ";cout<<endl;
	//cout<<"#####"<<endl;
	lol(j,N)c[j]=0;
	ll lim=max(0LL,rnd-i);
	for(ll j=0;j<=lim;j++)Mad(c[j],d[j]+d[j+1]);
	lol(j,N)d[j]=c[j];
    }
    cout<<d[0]<<endl;
    return 0;
}




