#include <bits/stdc++.h>
using namespace std;
double d[510][610];
int n, m, k;
int t[510], x, y, deg[510], g[510][510], a[501], tot;
const double eps = 1e-6;
struct matrix {
  double a[110][110];
} ans, bas, zero;
inline matrix operator*(const matrix &a, const matrix &b) {
  matrix c;
  memset(c.a, 0, sizeof(c.a));
  for (int k = 1; k <= tot; k++) {
    for (int i = 1; i <= tot; i++)
      for (int j = 1; j <= tot; j++) c.a[i][j] += a.a[i][k] * b.a[k][j];
  }
  return c;
}
inline matrix qpow(matrix a, int b) {
  matrix k = zero;
  for (int i = 1; i <= tot; i++) k.a[i][i] = 1;
  while (b) {
    if (b & 1) k = k * a;
    a = a * a;
    b = b >> 1;
  }
  return k;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &t[i]);
    if (t[i]) a[++tot] = i;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x, &y);
    deg[x]++, deg[y]++;
    g[x][y]++;
    g[y][x]++;
  }
  for (int i = 1; i <= n; i++) {
    if (t[i] == 0) {
      for (int j = 1; j <= n; j++) d[i][j] = 1.0 * g[i][j] / deg[i];
      d[i][i] = -1;
    } else {
      int pos = 0;
      for (int j = 1; j <= tot; j++)
        if (a[j] == i) {
          pos = j;
          break;
        }
      d[i][i] = d[i][n + pos] = 1;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (fabs(d[i][i]) < eps) {
      for (int j = i + 1; j <= n; j++)
        if (fabs(d[j][i]) > eps) {
          swap(d[i], d[j]);
          break;
        }
    }
    double div = d[i][i];
    for (int k = i; k <= n + tot; k++) d[i][k] /= div;
    for (int j = 1; j <= n; j++) {
      if (j == i) continue;
      double tmp = d[j][i] / d[i][i];
      for (int k = i; k <= n + tot; k++) d[j][k] -= d[i][k] * tmp;
    }
  }
  for (int i = 1; i <= tot; i++) ans.a[1][i] = d[1][n + i];
  for (int i = 1; i <= tot; i++) {
    for (int j = 1; j <= tot; j++) {
      for (int k = 1; k <= n; k++) bas.a[i][j] += g[a[i]][k] * d[k][n + j];
      bas.a[i][j] /= deg[a[i]];
    }
  }
  ans = ans * qpow(bas, k - 2);
  printf("%.8lf", ans.a[1][tot]);
}
