#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
double a[610][610], d[110][110], tmp[610][610], ans[110][110], du[610];
int n, m, K, tot, be[610], trap[610];
void gauss() {
  for (int i = 1; i <= n; ++i) {
    for (int j = i; j <= n; ++j)
      if (a[j][i]) {
        for (int k = 1; k <= tot; ++k) swap(a[j][k], a[i][k]);
        break;
      }
    for (int j = tot; j >= 1; --j) a[i][j] /= a[i][i];
    for (int j = 1; j <= n; ++j)
      if (j != i && a[j][i] != 0)
        for (int k = tot; k >= i; --k) a[j][k] -= a[j][i] * a[i][k];
  }
  for (int i = 1; i <= n; ++i)
    if (trap[i])
      for (int j = n + 1; j <= tot; ++j) d[be[i] - n][j - n] = -a[i][j];
}
void cheng(double a[110][110], double b[110][110]) {
  double c[110][110];
  memset(c, 0, sizeof(c));
  for (int i = 1; i <= tot; ++i)
    for (int j = 1; j <= tot; ++j)
      for (int k = 1; k <= tot; ++k) c[i][k] += a[i][j] * b[j][k];
  for (int i = 1; i <= tot; ++i)
    for (int j = 1; j <= tot; ++j) a[i][j] = c[i][j];
}
void work() {
  tot -= n;
  for (int i = 1; i <= tot; ++i) ans[i][i] = 1;
  K -= 2;
  memcpy(tmp, a, sizeof(tmp));
  while (K) {
    if (K & 1) cheng(ans, d);
    cheng(d, d);
    K /= 2;
  }
  double fans = 0;
  for (int i = n + 1; i <= tot + n; ++i) fans += ans[i - n][tot] * -tmp[1][i];
  printf("%.10lf\n", fans);
}
int main() {
  scanf("%d%d%d", &n, &m, &K);
  tot = n;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &trap[i]);
    if (trap[i]) be[i] = ++tot;
  }
  for (int i = 1; i <= m; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    du[x]++;
    du[y]++;
    if (trap[y])
      a[x][be[y]]++;
    else
      a[x][y]++;
    if (trap[x])
      a[y][be[x]]++;
    else
      a[y][x]++;
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= tot; ++j) a[i][j] /= du[i];
    a[i][i] = -1;
  }
  gauss();
  work();
}
