#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const long long MOD = 1000000007;
const int INF = 1e9;
const long long LINF = 1LL * INF * INF;
const int MAXN = 100007;
const double EPS = 1e-7;
const int DX[4] = {1, 0, -1, 0}, DY[4] = {0, 1, 0, -1};
int n, m, r, k;
set<pair<int, int> > U;
priority_queue<pair<long long, pair<int, int> > > Q;
long long f(int i, int j) {
  return (min(i, n - r) - max(0, i - r + 1) + 1LL) *
         (min(j, m - r) - max(0, j - r + 1) + 1LL);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long s = 0;
  cin >> n >> m >> r >> k;
  Q.push(make_pair(f(n / 2, m / 2), make_pair(n / 2, m / 2)));
  U.insert(make_pair(n / 2, m / 2));
  for (int j = (0); j < (k); ++j) {
    s += Q.top().first;
    int x = Q.top().second.first, y = Q.top().second.second;
    Q.pop();
    for (int i = (0); i < (4); ++i) {
      if (x + DX[i] >= 0 && x + DX[i] < n && y + DY[i] >= 0 && y + DY[i] < m &&
          !U.count(make_pair(x + DX[i], y + DY[i]))) {
        Q.push(make_pair(f(x + DX[i], y + DY[i]),
                         make_pair(x + DX[i], y + DY[i])));
        U.insert(make_pair(x + DX[i], y + DY[i]));
      }
    }
  }
  cout << fixed << setprecision(12) << s / (n - r + 1.0) / (m - r + 1.0);
  return 0;
}
