#include <bits/stdc++.h>
using namespace std;
const long long linf = 1e18 + 5;
const int mod = (int)1e9 + 7;
const int logN = 17;
const int inf = 1e9;
const int N = 23;
const int M = 23 * 22 + 1;
int state, n, m, x, y, z, a, b;
double A[M][M], B[M][M], dd, ans[N], mt[N][N];
vector<int> v[N];
int main() {
  double start = clock();
  scanf("%d %d %d %d", &n, &m, &a, &b);
  state = n * n;
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%lf", &dd);
    mt[i][i] = dd;
    dd = (1 - dd) / v[i].size();
    for (__typeof(v[i].begin()) it = v[i].begin(); it != v[i].end(); it++)
      mt[i][*it] = dd;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      for (int i2 = 1; i2 <= n; i2++)
        for (int j2 = 1; j2 <= n; j2++)
          A[(i - 1) * n + j][(i2 - 1) * n + j2] = mt[i][i2] * mt[j][j2];
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= state; j++) A[i * n - n + i][j] = 0;
    A[i * n - n + i][i * n - n + i] = 1;
  }
  for (int q = 0; q < inf; q++) {
    if ((clock() - start) / (double)CLOCKS_PER_SEC > 0.9) break;
    for (int i = 1; i <= state; i++)
      for (int j = 1; j <= state; j++)
        B[i][j] = (A[i][j] > 1e-11) ? A[i][j] : 0;
    memset(A, 0, sizeof A);
    for (int k = 1; k <= state; k++)
      for (int i = 1; i <= state; i++)
        if (B[i][k])
          for (int j = 1; j <= state; j++) A[i][j] += B[i][k] * B[k][j];
  }
  for (int i = 1; i <= n; i++)
    printf("%.12lf ", A[a * n - n + b][i * n - n + i]);
  cout << '\n';
  return 0;
}
