#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7, M = 1e5 + 100;
void Solution();
struct comp {
  bool operator()(pair<long long int, pair<long long int, long long int> > a,
                  pair<long long int, pair<long long int, long long int> > b) {
    return (a.first > b.first) || (a.first == b.first && a.second > b.second);
  }
};
long long int n, m, r, k;
long double sum;
set<pair<long long int, pair<long long int, long long int> >, comp> mxs;
set<pair<long long int, long long int> > prc;
pair<long long int, long long int> ways[4] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  Solution();
  return 0;
}
inline long long int getcnt(long long int px, long long int py) {
  px = min(max(px, 1LL), n);
  py = min(max(py, 1LL), m);
  long long int cx = min(n - r + 1, px) - max(px - r + 1, 1LL) + 1;
  long long int cy = min(m - r + 1, py) - max(py - r + 1, 1LL) + 1;
  return cy * cx;
}
inline bool isprc(long long int px, long long int py) {
  px = min(max(px, 1LL), n);
  py = min(max(py, 1LL), m);
  return prc.find(make_pair(px, py)) != prc.end();
}
inline void checkways(long long int px, long long int py) {
  px = min(max(px, 1LL), n);
  py = min(max(py, 1LL), m);
  for (long long int w = 0; w < 4; w++) {
    if (!isprc(px + ways[w].first, py + ways[w].second)) {
      mxs.insert(make_pair(getcnt(px + ways[w].first, py + ways[w].second),
                           make_pair(px + ways[w].first, py + ways[w].second)));
    }
  }
}
void Solution() {
  cin >> n >> m >> r >> k;
  k--;
  sum += getcnt((n + 1) / 2, (m + 1) / 2);
  prc.insert(make_pair((n + 1) / 2, (m + 1) / 2));
  checkways((n + 1) / 2, (m + 1) / 2);
  while (k--) {
    auto cur = *mxs.begin();
    mxs.erase(mxs.begin());
    sum += cur.first;
    prc.insert(cur.second);
    checkways(cur.second.first, cur.second.second);
  }
  long double sz = (n - r + 1) * (m - r + 1);
  sum /= sz;
  cout << fixed << setprecision(15);
  cout << sum << endl;
}
