#include <bits/stdc++.h>
using namespace std;
int n, m, r, t;
set<pair<int, int> > vis;
struct Node {
  pair<int, int> pos;
  long long cnt;
  bool operator<(const Node& nd) const { return cnt < nd.cnt; }
};
priority_queue<Node> Q;
const int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};
long long calc(int x, int y) {
  return (long long)(min(n, x + r - 1) - max(x, r) + 1) *
         (min(m, y + r - 1) - max(y, r) + 1);
}
long long tot;
int main() {
  scanf("%d%d%d%d", &n, &m, &r, &t);
  vis.insert(make_pair((n + 1) / 2, (m + 1) / 2));
  Q.push((Node){make_pair((n + 1) / 2, (m + 1) / 2),
                calc((n + 1) / 2, (m + 1) / 2)});
  while (t && !Q.empty()) {
    Node cur = Q.top();
    Q.pop();
    tot += calc(cur.pos.first, cur.pos.second);
    --t;
    if (!t) break;
    for (int i = 0; i < 4; ++i) {
      int x = cur.pos.first + dx[i], y = cur.pos.second + dy[i];
      if ((x > 0 && x <= n && y > 0 && y <= m) && !vis.count(make_pair(x, y))) {
        Q.push((Node){make_pair(x, y), calc(x, y)});
        vis.insert(make_pair(x, y));
      }
    }
  }
  printf("%.12lf", (double)tot / ((double)(m - r + 1) * (n - r + 1)));
  return 0;
}
