#include <bits/stdc++.h>
using namespace std;
template <typename T>
void out(T x) {
  cout << x << endl;
  exit(0);
}
const long long mod = 1e9 + 7;
const int maxn = 1e5 + 5;
const vector<pair<int, int>> moves = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
long long n, m, r, k;
set<int> added[maxn];
long long count(long long x, long long y) {
  long long xrange = min(n + 1, x + r) - max(x, r);
  long long yrange = min(m + 1, y + r) - max(y, r);
  long long res = xrange * yrange;
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> r >> k;
  int midx = (n + 1) / 2;
  int midy = (m + 1) / 2;
  priority_queue<pair<long long, pair<long long, long long>>> pq;
  auto add = [&](int x, int y) {
    if (added[x].count(y)) return;
    added[x].insert(y);
    pq.push({count(x, y), {x, y}});
  };
  for (int i = -1; i <= 1; i++) {
    for (int j = -1; j <= 1; j++) {
      int x = midx + i;
      int y = midy + j;
      if (x < 1 || y < 1 || x > n || y > m) continue;
      add(x, y);
    }
  }
  double tot = 0;
  while (k--) {
    auto cur = pq.top();
    pq.pop();
    tot += cur.first;
    int X = cur.second.first;
    int Y = cur.second.second;
    for (int i = -1; i <= 1; i++) {
      for (int j = -1; j <= 1; j++) {
        int x = X + i;
        int y = Y + j;
        if (x < 1 || y < 1 || x > n || y > m) continue;
        add(x, y);
      }
    }
  }
  double den = (n - r + 1) * (m - r + 1);
  double res = tot / den;
  cout << fixed << setprecision(12) << res << endl;
  return 0;
}
