#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXN = 1000000;
int n, nq;
int v[MAXN], c[MAXN];
int mn[MAXN], mnhead, mntail;
int mx[MAXN], mxhead, mxtail;
int dp[MAXN];
void run() {
  scanf("%d%d", &n, &nq);
  for (int i = (0); i < (n); ++i) scanf("%d", &v[i]), v[i] *= 100;
  for (int i = (0); i < (n); ++i) scanf("%d", &c[i]);
  mnhead = mntail = mxhead = mxtail = 0;
  for (int i = n - 1; i >= 0; --i) {
    while (mntail < mnhead && c[i] <= c[mn[mnhead - 1]]) --mnhead;
    mn[mnhead++] = i;
    while (mxtail < mxhead && v[i] >= v[mx[mxhead - 1]]) --mxhead;
    mx[mxhead++] = i;
    while (mn[mntail] != i || mx[mxtail] != i) {
      int mnidx = mn[mntail], mxidx = mx[mxtail];
      if (c[mnidx] > v[mxidx] || c[mnidx < mxidx ? mnidx : mn[mntail + 1]] >
                                     v[mxidx < mnidx ? mxidx : mx[mxtail + 1]])
        break;
      if (mnidx >= mxidx) ++mntail;
      if (mxidx >= mnidx) ++mxtail;
    }
    {
      int mnidx = mn[mntail], mxidx = mx[mxtail];
      int a = min(c[mnidx], v[mxidx]);
      if (mnidx != i || mxidx != i) {
        int b = min(c[mnidx < mxidx ? mnidx : mn[mntail + 1]],
                    v[mxidx < mnidx ? mxidx : mx[mxtail + 1]]);
        dp[i] = max(a, b);
      } else {
        dp[i] = a;
      }
    }
  }
  sort(dp, dp + n);
  double ret = 0, p = 1;
  for (int i = (0); i < (n); ++i) {
    ret += p * 1.0 * nq / (n - i) * dp[i];
    p *= 1 - 1.0 * nq / (n - i);
  }
  printf("%.9lf\n", ret);
}
int main() {
  run();
  return 0;
}
