#include <bits/stdc++.h>
using namespace std;
const int DX[] = {-1, 0, 1, 0};
const int DY[] = {0, -1, 0, 1};
int n, m;
long long r, k;
long long f(long long x, long long y) {
  return min(min(x, n - x + 1), min(r, n - r + 1)) *
         min(min(y, m - y + 1), min(r, m - r + 1));
}
int main() {
  ios::sync_with_stdio(false);
  cout.precision(10);
  cin >> n >> m >> r >> k;
  priority_queue<pair<long long, pair<int, int> > > q;
  set<pair<int, int> > st;
  q.push(
      make_pair(f(n + 1 >> 1, m + 1 >> 1), make_pair(n + 1 >> 1, m + 1 >> 1)));
  long long sum = 0;
  int i = 0;
  while (i < k) {
    pair<long long, pair<int, int> > cur = q.top();
    q.pop();
    int x = cur.second.first, y = cur.second.second;
    if (st.find(make_pair(x, y)) != st.end()) continue;
    i++;
    st.insert(make_pair(x, y));
    sum += cur.first;
    for (int d = 0; d < 4; d++) {
      int xx = x + DX[d];
      int yy = y + DY[d];
      long long val = f(xx, yy);
      pair<int, int> p(xx, yy);
      q.push(make_pair(val, p));
    }
  }
  long long d = (n - r + 1) * (m - r + 1);
  double ans = sum / (double)d;
  cout << fixed << setprecision(13) << ans << "\n";
  return 0;
}
