#include //#include #include #include #define rep(i, n) for(int i = 0; i < (n); i++) #define rrep(i, n) for(int i = (n-1); i >= 0; i--) using namespace std; using namespace atcoder; typedef long long ll; const int MOD = 1000000007; //const int MOD = 998244353; const ll INF = 1LL<<61; const int IINF = 1000000000; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } typedef pair PI; typedef pair P; typedef pair PS; //using mint = modint1000000007; using modint1000000007 = static_modint<1000000007>; using modint1000000006 = static_modint<1000000006>; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll A, B, C; cin >> A >> B >> C; ll K; cin >> K; modint1000000007 a = A; modint1000000007 b = B; modint1000000007 c = C; modint1000000007 ans = a*b*c; modint1000000006 K2 = 2; K2 = K2.pow(K); ans = ans.pow(K2.val()); cout << ans.val() << endl; }