#include <bits/stdc++.h>
using namespace std;
int n, m, r, k;
int dx[8] = {1, 1, 1, 0, 0, -1, -1, -1};
int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
long long f(pair<int, int> pos) {
  int col = m - r + 1;
  int totC =
      col - max(0, m - (pos.second + 1) - r + 1) - max(0, pos.second - r + 1);
  int row = n - r + 1;
  int totR =
      row - max(0, n - (pos.first + 1) - r + 1) - max(0, pos.first - r + 1);
  return (long long)totR * totC;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &r, &k);
  priority_queue<pair<int, pair<int, int>>> Q;
  map<pair<int, int>, bool> vis;
  Q.emplace(make_pair(f({n / 2, m / 2}), make_pair(n / 2, m / 2)));
  vis[{n / 2, m / 2}] = true;
  long long sum = 0;
  while (!Q.empty() && k) {
    long long qtt = Q.top().first;
    pair<int, int> v = Q.top().second;
    Q.pop();
    sum += qtt;
    k--;
    for (int i = 0; i < 8; i++) {
      int x = dx[i] + v.first;
      int y = dy[i] + v.second;
      if (x < 0 or x >= n or y < 0 or y >= m or vis.count({x, y})) continue;
      vis[{x, y}] = 1;
      Q.emplace(f({x, y}), make_pair(x, y));
    }
  }
  long long tot = ((long long)m - r + 1) * (n - r + 1);
  printf("%.15lf\n", (double)sum / tot);
  return 0;
}
