#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, m, mod;
char s[N];
int cnt[N];
long long f[2][N][N];
void upd(long long &a, long long b) {
  a += b;
  if (a >= mod) a -= mod;
}
int main() {
  while (~scanf("%d%d%d", &n, &m, &mod)) {
    memset(f, 0, sizeof(f));
    memset(cnt, 0, sizeof(cnt));
    for (int i = (0); i < (m); i++) {
      scanf("%s", s);
      for (int j = (0); j < (n); j++) cnt[j] += s[j] == '1';
    }
    int c1 = 0, c2 = 0;
    for (int i = (0); i < (n); i++) {
      if (cnt[i] == 0) {
        ++c2;
      } else if (cnt[i] == 1) {
        ++c1;
      }
    }
    f[0][c1][c2] = 1;
    int t = 0;
    for (int k = (m + 1); k < (n + 1); k++) {
      memset(f[t ^ 1], 0, sizeof(f[0]));
      for (int i = (0); i < (n + 1); i++)
        for (int j = (0); j < (n + 1); j++)
          if (f[t][i][j]) {
            if (i - 2 >= 0)
              upd(f[t ^ 1][i - 2][j], i * (i - 1) / 2 * f[t][i][j] % mod);
            if (j - 1 >= 0) upd(f[t ^ 1][i][j - 1], i * j * f[t][i][j] % mod);
            if (j - 2 >= 0)
              upd(f[t ^ 1][i + 2][j - 2], j * (j - 1) / 2 * f[t][i][j] % mod);
          }
      t ^= 1;
    }
    printf("%lld\n", f[t][0][0]);
  }
  return 0;
}
