#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cassert>
#include <cctype>
#include <algorithm>
#include <functional>
#include <utility>
const int ha = 1000000007;
inline void add(int &p, const int &val) {
  p += val; if(p >= ha) p -= ha;
}

const int maxn = 3005;
int R[maxn], f[maxn][maxn];
char S[maxn]; int sum[maxn];
int main() {
  int n, m; scanf("%d%d", &n, &m);
  scanf("%s", S + 1);
  for(int i = 1; i <= n; i ++) {
    sum[i] = sum[i - 1] + S[i] - '0';
    R[i] = i;
  }
  while(m --) {
    int l, r; scanf("%d%d", &l, &r);
    R[l] = std::max(R[l], r);
  }
  for(int i = 2; i <= n; i ++) R[i] = std::max(R[i], R[i - 1]);
  R[n + 1] = n;
  f[1][sum[R[1]]] = 1;
  for(int i = 1; i <= n; i ++) {
    for(int j = 0; j <= n; j ++) {
      int th = f[i][j];
      if(!th) continue;
#ifdef LOCAL
      printf("f[%d][%d] : %d\n", i, j, f[i][j]);
#endif
      int delta = sum[R[i + 1]] - sum[R[i]];
      if(j) add(f[i + 1][j + delta - 1], th);
      if(R[i] - i >= j) add(f[i + 1][j + delta], th);
    }
  }
  printf("%d\n", f[n + 1][0]);
  return 0;
}