#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int INF = 110;
long long zero, size;
struct Matrix {
  long long g[INF][INF];
  Matrix() { memset(g, 0, sizeof(g)); }
  Matrix operator*(const Matrix& a) {
    Matrix cur;
    for (int k = 0; k < size; k++) {
      for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
          cur.g[i][j] = (cur.g[i][j] + g[i][k] * a.g[k][j] % mod) % mod;
        }
      }
    }
    return cur;
  }
};
Matrix mat, ans;
long long c[110][110];
int a[INF];
long long quick(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return ans;
}
void mquick(int b) {
  for (int i = 0; i < size; i++) {
    ans.g[i][i] = 1;
  }
  while (b) {
    if (b & 1) ans = ans * mat;
    mat = mat * mat;
    b >>= 1;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  for (int i = 0; i <= 100; i++) {
    for (int j = 0; j <= i; j++) {
      if (j == 0)
        c[i][j] = 1;
      else
        c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
    }
  }
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    if (!a[i]) zero++;
  }
  size = zero + 1;
  long long revcn2 = quick(c[n][2], mod - 2);
  for (long long i = 0; i <= zero; i++) {
    int j = i;
    mat.g[i][j] = (c[zero][2] + c[n - zero][2] + i * (zero - i) +
                   (zero - i) * (n - 2 * zero + i + mod) % mod) *
                  revcn2 % mod;
    if (i > 0) mat.g[i][i - 1] = (zero - i + 1) * (zero - i + 1) * revcn2 % mod;
    if (i < zero)
      mat.g[i][i + 1] = (i + 1) * (n + i + 1 - 2 * zero) * revcn2 % mod;
  }
  mquick(k);
  long long res = 0;
  int count = 0;
  for (int i = 0; i < zero; i++) {
    if (!a[i]) count++;
  }
  res = ans.g[zero][count];
  cout << res;
}
