#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9, maxn = 5e2 + 11;
const long double eps = 1e-7;
const long long INF = 1e18, mod = 1e9 + 7;
const pair<unsigned long long, unsigned long long> base = make_pair(127, 137);
const pair<int, int> dir[4] = {make_pair(1, 0), make_pair(-1, 0),
                               make_pair(0, 1), make_pair(0, -1)},
                     dirs[4] = {make_pair(1, 1), make_pair(1, -1),
                                make_pair(-1, 1), make_pair(-1, -1)};
const pair<int, int> dirk[8] = {
    make_pair(2, 1), make_pair(2, -1), make_pair(-2, 1), make_pair(-2, -1),
    make_pair(1, 2), make_pair(1, -2), make_pair(-1, 2), make_pair(-1, -2)};
long long n, m, r, k;
set<pair<long long, pair<long long, long long> > > q;
long double sum;
map<pair<long long, long long>, bool> used;
long long get(pair<long long, long long> v) {
  return ((min(n, v.first + r - 1) - max(v.first, r) + 1) *
          (min(m, v.second + r - 1) - max(v.second, r) + 1));
}
bool check(pair<long long, long long> v) {
  return (v.first > 0 && v.second > 0 && v.first <= n && v.second <= m);
}
int main() {
  cin >> n >> m >> r >> k;
  q.insert(make_pair(-get(make_pair(r, r)), make_pair(r, r)));
  used[make_pair(r, r)] = true;
  while (k--) {
    pair<long long, pair<long long, long long> > v = *q.begin();
    q.erase(q.begin());
    sum -= v.first;
    for (int i = 0; i < 4; ++i) {
      pair<long long, long long> to = make_pair(
          dir[i].first + v.second.first, dir[i].second + v.second.second);
      if (check(to) && !used[to]) {
        q.insert(make_pair(-get(to), to));
        used[to] = true;
      }
    }
  }
  cout << fixed << setprecision(12) << sum / ((n - r + 1) * (m - r + 1));
  return 0;
}
