#include using namespace std; int main(){ long long N, M; int L, K; long long B; cin >> N >> M >> L >> K >> B; M %= B; auto convolution = [&](vector a, vector b){ vector c(L, 0); for (int i = 0; i < L; i++){ for (int j = 0; j < L; j++){ if (i + j < L){ c[i + j] += a[i] * b[j]; c[i + j] %= B; } else { c[i + j - L] += a[i] * b[j] % B * M; c[i + j - L] %= B; } } } return c; }; vector f(L, 0); f[0] += 1; f[0] %= B; if (L == 1){ f[0] += M; f[0] %= B; } else { f[1] += 1; f[1] %= B; } vector g(L, 0); g[0] = 1; g[0] %= B; while (N > 0){ if (N % 2 == 1){ g = convolution(g, f); } f = convolution(f, f); N /= 2; } cout << g[K] << endl; }