#include <bits/stdc++.h>
using namespace std;
long long power(long long a, long long b, long long c) {
  long long x = 1, y = a;
  while (b > 0) {
    if (b & 1) x = (x * y) % c;
    y = (y * y) % c;
    b /= 2;
  }
  return x % c;
}
int dx[] = {0, -1, 0, 1};
int dy[] = {-1, 0, 1, 0};
int dr[] = {1, 1, 0, -1, -1, -1, 0, 1};
int dc[] = {0, 1, 1, 1, 0, -1, -1, -1};
long long n, m, r, k;
long long doit(long long x, long long y) {
  long long aa = min(x, n - r + 1) - max(0LL, x - r),
            bb = min(y, m - r + 1) - max(0LL, y - r);
  return aa * bb;
}
bool valid(long long x, long long y) {
  if (x >= 1 && x <= n && y >= 1 && y <= m) return 1;
  return 0;
}
int main() {
  scanf("%lld%lld", &n, &m), scanf("%lld%lld", &r, &k);
  priority_queue<pair<long long, pair<long long, long long> > > pq;
  long long sx = (n + 1) / 2, sy = (m + 1) / 2;
  pq.push({doit(sx, sy), {sx, sy}});
  map<pair<long long, long long>, int> vis;
  double ans = 0, den = (n - r + 1) * (m - r + 1);
  while (!pq.empty() && k) {
    pair<long long, pair<long long, long long> > pp = pq.top();
    pq.pop();
    sx = pp.second.first, sy = pp.second.second;
    if (vis[make_pair(sx, sy)]) continue;
    ans += doit(sx, sy);
    vis[{sx, sy}] = 1;
    k--;
    for (int i = 0; i < 4; ++i) {
      if (valid(sx + dx[i], sy + dy[i]) && !vis[{sx + dx[i], sy + dy[i]}]) {
        pq.push({doit(sx + dx[i], sy + dy[i]), {sx + dx[i], sy + dy[i]}});
      }
    }
  }
  ans /= den;
  printf("%.10lf\n", ans);
  return 0;
}
