#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for (int i = (a); i < int(b); ++i)
#define REP(i, n) FOR(i, 0, n)

struct Edge {
    int src, dst;
};
using Graph = vector<vector<Edge>>;

void print_float(double x, int precision=15) {
    cout.setf(ios::fixed);
    cout.precision(precision);
    cout << x << '\n';
}

int main() {
    cin.tie(0); ios_base::sync_with_stdio(false);

    int N, M, P;
    while (cin >> N >> M >> P) {
        double p = P/100.0;
        Graph graph(N);
        vector<Edge> edges;
        REP(i, M) {
            int u, v; cin >> u >> v; --u; --v;
            edges.push_back((Edge){u, v});
        }

        vector<double> dp(1<<N);
        REP(S, 1<<N) {
            double q = 0;
            for (int T = (S-1)&S; T; T = (T-1)&S) {
                if ((T&-T) != (S&-S)) continue;
                int k = 0;
                REP(i, M) {
                    int x = 1 << edges[i].src;
                    int y = 1 << edges[i].dst;
                    if ((x&S) && (y&S) && !(x&T) != !(y&T))
                        ++k;
                }
                q += dp[T] * pow(p, k);
            }
            dp[S] = 1 - q;
        }
        print_float(dp[(1<<N)-1]);
    }
}