#include <bits/stdc++.h>
using namespace std;
const int DCNT = 4;
const pair<int, int> D[DCNT] = {make_pair(1, 0), make_pair(-1, 0),
                                make_pair(0, 1), make_pair(0, -1)};
int n, m, r, k;
priority_queue<pair<long long, pair<int, int> > > q;
long long sum;
set<pair<int, int> > used;
long long f(int i, int j) {
  long long x = r, y = r;
  if (i < r) x -= (r - i);
  if (j < r) y -= (r - j);
  i = n - i + 1;
  j = m - j + 1;
  if (i < r) x -= (r - i);
  if (j < r) y -= (r - j);
  return x * y;
}
void add_adjacent(int r, int c) {
  int i, p, t;
  for (i = 0; i < DCNT; i++) {
    p = r + D[i].first;
    t = c + D[i].second;
    if (p >= 1 && p <= n && t >= 1 && t <= m) {
      if (used.find(make_pair(p, t)) == used.end()) {
        used.insert(make_pair(p, t));
        q.push(make_pair(f(p, t), make_pair(p, t)));
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int i;
  cin >> n >> m >> r >> k;
  used.insert(make_pair((n + 1) / 2, (m + 1) / 2));
  q.push(make_pair(f((n + 1) / 2, (m + 1) / 2),
                   make_pair((n + 1) / 2, (m + 1) / 2)));
  for (i = 1; i <= k; i++) {
    sum += q.top().first;
    pair<int, int> curr = q.top().second;
    q.pop();
    add_adjacent(curr.first, curr.second);
  }
  cout << setprecision(15) << fixed
       << (double)(sum) / (double)(n - r + 1) / (double)(m - r + 1) << '\n';
  return 0;
}
