#include <bits/stdc++.h>
using namespace std;
int n, m, r, k;
vector<int> v1, v2;
long long f(long long x) {
  long long res = 0;
  int j = ((int)v2.size()) - 1;
  for (int i = 0; i < ((int)v1.size()); i++) {
    while (j >= 0 && 1ll * v1[i] * v2[j] >= x) j--;
    res += ((int)v2.size()) - 1 - j;
  }
  return res;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &r, &k);
  for (int i = 0, j = n - 1, c = 1; i <= j; i++, j--) {
    v1.push_back(c);
    if (i < j) v1.push_back(c);
    if (c < min(r, n - r + 1)) c++;
  }
  for (int i = 0, j = m - 1, c = 1; i <= j; i++, j--) {
    v2.push_back(c);
    if (i < j) v2.push_back(c);
    if (c < min(r, m - r + 1)) c++;
  }
  sort(v1.begin(), v1.end());
  sort(v2.begin(), v2.end());
  long long lo = 0, hi = 1e18;
  while (lo < hi) {
    long long mid = (lo + hi + 1) >> 1;
    if (f(mid) < k)
      hi = mid - 1;
    else
      lo = mid;
  }
  long long cnt = 0;
  priority_queue<long long> pq;
  int j = ((int)v2.size()) - 1;
  for (int i = 0; i < ((int)v1.size()); i++) {
    while (j >= 0 && 1ll * v1[i] * v2[j] > lo) j--;
    for (int t = j + 1; t < ((int)v2.size()); t++) pq.push(1ll * v1[i] * v2[t]);
  }
  while (k && !pq.empty()) cnt += pq.top(), pq.pop(), k--;
  while (k--) cnt += lo;
  printf("%.10Lf", (long double)cnt / (n - r + 1) / (m - r + 1));
  return 0;
}
