#include <bits/stdc++.h>
using namespace std;
struct state {
  long long y, x, v;
  bool operator<(const state &s) const { return v < s.v; }
};
long long N, M, R, K;
long long value(long long y, long long x) {
  long long nl = max(y - R + 1, 0LL), nr = min(y, N - R);
  long long ml = max(x - R + 1, 0LL), mr = min(x, M - R);
  long long n = nr - nl + 1;
  long long m = mr - ml + 1;
  return n * m;
}
int main(void) {
  cin >> N >> M >> R >> K;
  long long s = 0;
  map<pair<long long, long long>, bool> visited;
  priority_queue<state> q;
  q.push((state){N / 2, M / 2, value(N / 2, M / 2)});
  while (q.size() && K > 0) {
    long long y = q.top().y, x = q.top().x, v = q.top().v;
    q.pop();
    if (visited[pair<long long, long long>(y, x)]) continue;
    visited[pair<long long, long long>(y, x)] = true;
    s += v;
    K--;
    long long dd[5] = {0, -1, 0, 1, 0};
    for (long long i = ((long long)0); i < ((long long)4); i++) {
      long long ny = y + dd[i], nx = x + dd[i + 1];
      if (0 <= ny && ny < N && 0 <= nx && nx < M &&
          !visited[pair<long long, long long>(ny, nx)])
        q.push((state){ny, nx, value(ny, nx)});
    }
  }
  long long t = (N - R + 1) * (M - R + 1);
  printf("%.15lf\n", (double)s / t);
}
