#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fll;
const int MAXN = 510;
const int MAXT = 110;
double p[MAXN][MAXN];
vector<int> adj[MAXN];
bool isTrap[MAXN];
int n, m, k;
double mat[MAXT][MAXT];
double aux[MAXT][MAXT];
double v[MAXN];
bool foi[MAXN][MAXN];
int deg[MAXN];
int mp[MAXN], remp[MAXN];
double mpow[MAXT][MAXT];
int cnt = 0;
void reduce(int v) {
  double self = p[v][v];
  for (int a = 0; a < n; ++a) {
    if (a == v) continue;
    for (int b = 0; b < n; ++b) {
      if (b == v) continue;
      p[a][b] += p[a][v] * p[v][b] / (1 - self);
    }
  }
  for (int a = 0; a < n; ++a) p[a][v] = p[v][a] = 0;
}
void mult(double m1[][MAXT], double m2[][MAXT], double m3[][MAXT]) {
  for (int a = 0; a < cnt; ++a) {
    for (int b = 0; b < cnt; ++b) {
      m3[a][b] = 0;
      for (int c = 0; c < cnt; ++c) m3[a][b] += m1[a][c] * m2[c][b];
    }
  }
}
void print(double mat[][MAXN]) {
  for (int a = 0; a < n; ++a) {
    for (int b = 0; b < n; ++b) printf("%.2f ", mat[a][b]);
    printf("\n");
  }
  printf("---\n");
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int a = 0; a < n; ++a) {
    int x;
    scanf("%d", &x);
    isTrap[a] = (x == 1);
    if (x == 1) {
      mp[a] = cnt;
      remp[cnt] = a;
      cnt++;
    }
  }
  for (int a = 0; a < m; ++a) {
    int u, v;
    scanf("%d%d", &u, &v);
    --u;
    --v;
    if (!foi[u][v]) {
      adj[u].push_back(v);
      adj[v].push_back(u);
      foi[u][v] = foi[v][u] = 1;
    }
    deg[u]++;
    deg[v]++;
    p[u][v] += 1;
    p[v][u] += 1;
  }
  for (int a = 0; a < n; ++a) {
    for (int b = 0; b < n; ++b) p[a][b] /= deg[a];
  }
  for (int a = 1; a < n; ++a) {
    if (!isTrap[a]) reduce(a);
  }
  double self0 = p[0][0];
  for (int a = 1; a < n; ++a) v[a] = p[0][a] / (1 - self0);
  reduce(0);
  for (int a = 0; a < cnt; ++a)
    for (int b = 0; b < cnt; ++b) mpow[a][b] = p[remp[a]][remp[b]];
  k -= 2;
  for (int a = 0; a < cnt; ++a) mat[a][a] = 1;
  while (k) {
    if (k & 1) {
      mult(mpow, mat, aux);
      memcpy(mat, aux, sizeof(aux));
    }
    mult(mpow, mpow, aux);
    memcpy(mpow, aux, sizeof(aux));
    k >>= 1;
  }
  double ans = 0;
  for (int a = 0; a < n; ++a) ans += v[a] * mat[mp[a]][mp[n - 1]];
  printf("%.10f\n", ans);
  return 0;
}
