#include<bits/stdc++.h> #define maxn 1010 #define int long long usingnamespace std; constdouble eps = 1e-8; double f[maxn][maxn]; int e[1000100][3], sz[1000100], idx;
voidinsert(string s){ int p = 0; for (auto u : s) { if(!e[p][u - '0']) e[p][u - '0'] = ++idx; p = e[p][u - '0']; sz[p]++; } }
voidsolve(){ int n, m; double p, res = 1; cin >> n >> m >> p; for (int i = 1; i <= n; ++i) { string s; cin >> s; insert(s); } f[0][0] = 1; for (int i = 0; i <= n; ++i) { for (int j = 0; j <= n; ++j) { if(i && j) f[i][j] = max(p * f[i - 1][j] + (1.0 - p) * f[i][j - 1], p * f[i][j - 1] + (1.0 - p) * f[i - 1][j]); elseif(i) f[i][j] = max(p * f[i - 1][j], (1.0 - p) * f[i - 1][j]); elseif(j) f[i][j] = max((1.0 - p) * f[i][j - 1], p * f[i][j - 1]); } } for (int i = 0; i < idx; ++i) res *= f[sz[e[i][0]]][sz[e[i][1]]]; cout << fixed << setprecision(10) << res << '\n'; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t = 1; while (t--) { solve(); } return0; }