#include template class Array { public: T* p; int size; int seek; Array(int N) { p = new T[N]; size = N; seek = 0; } Array(int N, T x) { p = new T[N]; for(int i = 0; i < N; ++i) p[i] = x; size = N; seek = 0; } const T& operator() (int i) const { return p[i]; } }; template inline Array update(Array& xs, int i, const T& x) { Array res = xs; res.p[i] = x; xs.p = nullptr; return res; } template inline T foldl1(U f, Array& xs) { T res = xs(0); for(int i = 1; i < xs.size; ++i) { res = f(res, xs(i)); } return res; } template T add(const T& x, const T& y) { return x + y; } int main() { long a; scanf("%ld", &a); long b; scanf("%ld", &b); long c; scanf("%ld", &c); long d; scanf("%ld", &d); long res = a * b % d * c % d; printf("%ld\n", res); return 0; }