#include <bits/stdc++.h>
double m[555][555], now[555][555], tm[555][555], a[555][555], b[555][555],
    one[555];
int n, M, k, trap[555], map[555][555], tot[555];
void m_mul(double (&dest)[555][555], double (&src)[555][555]) {
  memset(tm, 0, sizeof tm);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++) tm[i][j] += dest[i][k] * src[k][j];
  memcpy(dest, tm, sizeof dest);
}
void gauss() {
  for (int i = 1; i <= n; i++) {
    if (a[i][i] < 1e-8 && a[i][i] > -1e-8) {
      for (int j = i + 1; j <= n; j++)
        if (a[j][i] > 1e-8) {
          for (int k = 1; k <= n; k++) {
            std::swap(a[i][k], a[j][k]);
            std::swap(b[i][k], b[j][k]);
          }
          break;
        }
    }
    if (a[i][i] < 1e-8 && a[i][i] > -1e-8) continue;
    for (int j = i + 1; j <= n; j++) {
      double tt = a[j][i] / a[i][i];
      for (int k = 1; k <= n; k++) {
        a[j][k] -= a[i][k] * tt;
        b[j][k] -= b[i][k] * tt;
      }
    }
  }
  for (int i = n; i >= 1; i--)
    for (int j = 1; j < i; j++) {
      if (a[i][i] < 1e-8 && a[i][i] > -1e-8) continue;
      double tt = a[j][i] / a[i][i];
      a[j][i] -= a[i][i] * tt;
      for (int k = 1; k <= n; k++) b[j][k] -= b[i][k] * tt;
    }
}
int main() {
  scanf("%d%d%d", &n, &M, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &trap[i]);
    if (trap[i]) trap[i] = ++trap[0];
  }
  for (int i = 1; i <= M; i++) {
    int t1, t2;
    scanf("%d%d", &t1, &t2);
    map[t1][t2]++;
    map[t2][t1]++;
    tot[t1]++;
    tot[t2]++;
  }
  for (int i = 1; i <= n; i++)
    if (tot[i])
      for (int j = 1; j <= n; j++) {
        b[i][j] += map[j][i] * 1.0 / tot[j];
        if (!trap[j]) a[i][j] = -b[i][j];
      }
  for (int i = 1; i <= n; i++) a[i][i] = 1;
  gauss();
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (trap[i] && trap[j]) m[trap[i]][trap[j]] = b[j][i] / a[j][j];
  for (int i = 1; i <= n; i++)
    if (trap[i]) one[trap[i]] = b[i][1] / a[i][i];
  n = trap[0];
  for (int i = 1; i <= n; i++) now[i][i] = 1;
  for (k -= 2; k; k /= 2) {
    if (k & 1) m_mul(now, m);
    m_mul(m, m);
  }
  double ans = 0;
  for (int i = 1; i <= n; i++) ans += one[i] * now[i][n];
  printf("%f\n", ans);
}
