#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 50;
const int maxm = 1e6 + 50;
const double eps = 1e-10;
const int max_index = 62;
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
inline int read() {
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  int x = 0;
  while (isdigit(c)) {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x;
}
int main() {
  int a = read(), b = read(), c = read();
  int k = read();
  a--, b--, c--;
  int la = 1, lb = 1, lc = 1;
  long long ans = 1;
  while ((a || b || c) && k) {
    if (la <= lb && la <= lc) {
      if (a)
        ans += 1LL * lb * lc, a--, la++;
      else if (lb <= lc) {
        if (b)
          ans += 1LL * la * lc, b--, lb++;
        else
          ans += 1LL * la * lb, c--, lc++;
      } else {
        if (c)
          ans += 1LL * la * lb, c--, lc++;
        else
          ans += 1LL * la * lc, b--, lb++;
      }
    } else if (lb <= lc && lb <= la) {
      if (b)
        ans += 1LL * la * lc, lb++, b--;
      else if (la <= lc) {
        if (a)
          ans += 1LL * lb * lc, a--, la++;
        else
          ans += 1LL * la * lb, c--, lc++;
      } else {
        if (c)
          ans += 1LL * la * lb, c--, lc++;
        else
          ans += 1LL * lb * lc, a--, la++;
      }
    } else {
      if (c)
        ans += 1LL * la * lb, c--, lc++;
      else if (la <= lb) {
        if (a)
          ans += 1LL * lb * lc, a--, la++;
        else
          ans += 1LL * la * lc, b--, lb++;
      } else {
        if (b)
          ans += 1LL * la * lc, b--, lb++;
        else
          ans += 1LL * lb * lc, a--, la++;
      }
    }
    k--;
  }
  cout << ans << "\n";
  return 0;
}
