#include <bits/stdc++.h>
using namespace std;
inline long long int modadd(long long int n, long long int m,
                            long long int p = 1000000007) {
  return ((n + m) % p + p) % p;
}
inline long long int modsub(long long int n, long long int m,
                            long long int p = 1000000007) {
  return ((n - m + p) % p + p) % p;
}
inline long long int modpro(long long int n, long long int m,
                            long long int p = 1000000007) {
  return (((n % p) * (m % p)) % p + p) % p;
}
unsigned long long int powe(long long int first, long long int second) {
  unsigned long long int res = 1;
  while (second > 0) {
    if (second & 1) res = res * first;
    second = second >> 1;
    first = first * first;
  }
  return res;
}
long long int modpow(long long int first, long long int second,
                     long long int p = 1000000007) {
  long long int res = 1;
  while (second > 0) {
    if (second & 1) res = modpro(res, first, p);
    second = second >> 1;
    first = modpro(first, first, p);
  }
  return res;
}
inline long long int modInverse(long long int n, long long int p = 1000000007) {
  if (n == 1) return 1;
  return modpow(n, p - 2, p);
}
inline long long int moddiv(long long int n, long long int m,
                            long long int p = 1000000007) {
  return modpro(n, modInverse(m, p), p);
}
inline long long int modadd3(long long int first, long long int second,
                             long long int z, long long int p = 1000000007) {
  return modadd(modadd(first, second, p), z, p);
}
inline long long int modadd4(long long int first, long long int second,
                             long long int z, long long int w,
                             long long int p = 1000000007) {
  return modadd(modadd(first, second, p), modadd(z, w, p), p);
}
inline long long int modnCr(long long int fac[], int n, int r,
                            long long int p = 1000000007) {
  if (r == 0) return 1;
  return modpro(fac[n], modInverse(modpro(fac[r], fac[n - r], p), p), p);
}
template <typename T>
inline T max3(T first, T second, T z) {
  return max(max(first, second), z);
}
template <typename T>
inline T max4(T first, T second, T z, T w) {
  return max(max3(first, second, w), z);
}
template <typename T>
inline T min3(T first, T second, T z) {
  return min(min(first, second), z);
}
template <typename T>
inline T min4(T first, T second, T z, T w) {
  return min(min3(first, second, w), z);
}
template <typename T>
void printArr(T *arr, int s, int n) {
  for (int i = s; i <= n; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;
}
class matrix {
 public:
  int row, col;
  std::vector<std::vector<long long int>> num;
  matrix(int row, int col, int defaultValue = 0) {
    this->num = std::vector<std::vector<long long int>>(
        row, std::vector<long long int>(col, defaultValue));
    this->row = row, this->col = col;
  }
  matrix(std::vector<std::vector<long long int>> num) {
    this->num = num;
    this->row = this->num.size();
    this->col = this->num[0].size();
  }
  matrix operator*(matrix &another) {
    if (this->col != another.row) {
      printf("Wrong size: %d*%d X %d*%d\n", this->row, this->col, another.row,
             another.col);
      throw "Wrong size";
    }
    matrix newone(this->row, another.col);
    for (int r = 0; r < newone.row; r++)
      for (int c = 0; c < newone.col; c++) {
        for (int k = 0; k < this->col; k++) {
          newone.num[r][c] =
              (this->num[r][k] * another.num[k][c] + newone.num[r][c]) %
              1000000007;
        }
      }
    return newone;
  }
  matrix operator^(long long int first) {
    if (first == 0) {
      printf("Not implemented yet.\n");
      throw "Not implemented";
    } else if (first == 1)
      return *this;
    else {
      matrix halfpower = (*this) ^ (first / 2);
      if (first % 2 == 0)
        return halfpower * halfpower;
      else
        return halfpower * halfpower * (*this);
    }
  }
};
bool a[2005];
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  int erer = 1;
  for (int erer2 = (1); erer2 < (erer + 1); erer2++) {
    long long int n, k;
    cin >> n >> k;
    int one = 0;
    for (int i = (0); i < (n); i++) {
      cin >> a[i];
      one += a[i];
    }
    matrix tpm(one + 1, one + 1);
    long long int now = n * (n - 1) / 2;
    long long int inv = modInverse(now % 1000000007);
    for (int i = (0); i < (one + 1); i++) {
      int rone = i;
      int rzero = one - i;
      int lone = one - rone;
      int lzero = n - one - rzero;
      long long int sum = 0;
      if (i < one) {
        long long int temp = lone * rzero;
        tpm.num[i][i + 1] = (temp * inv) % 1000000007;
        sum += temp;
      }
      if (i) {
        long long int temp = rone * lzero;
        tpm.num[i][i - 1] = (temp * inv) % 1000000007;
        sum += temp;
      }
      tpm.num[i][i] = ((now - sum) * inv) % 1000000007;
    }
    tpm = tpm ^ k;
    int c = 0;
    for (int i = (n)-1; i >= (n - one); i--) {
      if (a[i]) c++;
    }
    cout << tpm.num[c][one];
  }
  return 0;
}
