#include <bits/stdc++.h>
using namespace std;
const long long maxn = 555;
long long dp[2][maxn][maxn];
string str[maxn];
long long n, m, mod;
void update(long long &ori, long long now) {
  ori += now;
  ori %= mod;
}
int main() {
  cin >> n >> m >> mod;
  memset(dp, 0, sizeof dp);
  for (long long i = 0; i < m; i++) cin >> str[i];
  long long num[3] = {0, 0, 0};
  for (long long i = 0; i < n; i++) {
    long long cnt = 0;
    for (long long j = 0; j < m; j++)
      if (str[j][i] == '1') cnt++;
    num[cnt]++;
  }
  long long now = 0;
  dp[now][num[1]][num[0]] = 1;
  for (long long i = m; i < n; i++, now ^= 1) {
    for (long long j = 0; j <= n; j++)
      for (long long k = 0; k <= n; k++) {
        if (!dp[now][j][k]) continue;
        if (j >= 2)
          update(dp[now ^ 1][j - 2][k], j * (j - 1) / 2 * dp[now][j][k]);
        if (k >= 2)
          update(dp[now ^ 1][j + 2][k - 2], k * (k - 1) / 2 * dp[now][j][k]);
        if (j >= 1 && k >= 1)
          update(dp[now ^ 1][j][k - 1], j * k * dp[now][j][k]);
      }
    memset(dp[now], 0, sizeof(dp[now]));
  }
  cout << dp[now][0][0] << endl;
  return 0;
}
