#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m, r, k, A, va[N], vb[N];
long long ans;
priority_queue<pair<pair<long long, int>, pair<long long, int> > > heap;
inline int calc(int a, int n) {
  if (a <= n + 1 - r) return a - max(1, a + 1 - r) + 1;
  if (max(1, a + 1 - r) > n + 1 - r) return 0;
  return n + 1 - r - max(1, a + 1 - r) + 1;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &r, &k);
  for (int i = 1; i <= n; i++) va[i] = calc(i, n);
  for (int i = 1; i <= m; i++) vb[i] = calc(i, m);
  A = min(m + 1 - r, r);
  for (int i = 1; i <= n; i++)
    heap.push(
        make_pair(make_pair(1ll * vb[A] * va[i], va[i]), make_pair(A, A)));
  while (k--) {
    pair<pair<long long, int>, pair<long long, int> > x = heap.top();
    heap.pop();
    ans += x.first.first;
    long long v1 = 0, v2 = 0;
    if (x.second.first == 1 && x.second.second == m) continue;
    if (x.second.first != 1) v1 = 1ll * x.first.second * vb[x.second.first - 1];
    if (x.second.second != m)
      v2 = 1ll * x.first.second * vb[x.second.second + 1];
    if (v1 > v2) {
      x.first.first = v1;
      x.second.first--;
    } else {
      x.first.first = v2;
      x.second.second++;
    }
    heap.push(x);
  }
  printf("%.12f\n", (double)ans / (double)(n + 1 - r) / (double)(m + 1 - r));
  return 0;
}
