#include <bits/stdc++.h>
using namespace std;
int n, m, k, trap[510];
int e[510][510];
long double t[510][510];
const long double EPS = 1e-9;
void mult(long double a[110][110], long double b[110][110],
          long double c[110][110]) {
  long double r[110][110] = {};
  for (int i = 0; i < (int)(110); i++)
    for (int j = 0; j < (int)(110); j++)
      for (int k = 0; k < (int)(110); k++) r[i][k] += a[i][j] * b[j][k];
  for (int i = 0; i < (int)(110); i++)
    for (int j = 0; j < (int)(110); j++) c[i][j] = r[i][j];
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < n; i++) scanf("%d", &trap[i]);
  while (m--) {
    int x, y;
    scanf("%d %d", &x, &y);
    --x;
    --y;
    ++e[x][y];
    ++e[y][x];
  }
  for (int i = 0; i < n; i++)
    if (!trap[i]) {
      int deg = 0;
      for (int j = 0; j < n; j++) deg += e[i][j];
      for (int j = 0; j < n; j++) t[i][j] -= (long double)e[i][j] / deg;
      t[i][i] += 1.0;
    } else {
      t[i][i] = 1.0;
    }
  for (int i = 0; i < n; i++)
    if (!trap[i]) {
      int j = i;
      for (int k = i; k < n; k++)
        if (abs(t[k][i]) > abs(t[j][i])) j = k;
      for (int k = 0; k < n; k++) swap(t[i][k], t[j][k]);
      double scale = t[i][i];
      for (int k = 0; k < n; k++) t[i][k] /= scale;
      for (int j = 0; j < n; j++)
        if (j != i) {
          scale = t[j][i];
          for (int k = 0; k < n; k++) t[j][k] -= t[i][k] * scale;
        }
    }
  for (int i = 0; i < n; i++)
    if (trap[i]) t[i][i] = -1.0;
  long double m[110][110] = {}, v[510][510] = {}, r[110][110] = {};
  int nr[510], next = 0;
  for (int i = 0; i < n; i++)
    if (trap[i]) nr[i] = next++;
  for (int i = 0; i < n; i++)
    if (trap[i]) {
      int deg = 0;
      for (int j = 0; j < n; j++) deg += e[i][j];
      for (int j = 0; j < n; j++)
        for (int k = 0; k < n; k++) v[i][k] -= t[j][k] / deg * e[i][j];
      for (int j = 0; j < n; j++)
        if (trap[j]) m[nr[i]][nr[j]] = v[i][j];
    }
  for (int i = 0; i < next; i++) r[i][i] = 1.0;
  k -= 2;
  while (k) {
    if (k & 1) mult(m, r, r);
    mult(m, m, m);
    k /= 2;
  }
  long double ans = 0.0;
  for (int i = 0; i < n; i++)
    if (trap[i]) {
      ans += -t[0][i] * r[nr[i]][next - 1];
    }
  printf("%.9lf\n", (double)ans);
  return 0;
}
