#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 22
#define BNCMAX 15
#define BNMOD 1000
int n, b, p, q;
typedef struct bn bn;
struct bn {
int c[BNCMAX];
};
bn a[NMAX][NMAX];
bn s[NMAX];
bn sola, solb;
void bnadd(bn *a, bn *b)
{
int i, r;
for(i = 1, r = 0; i <= a->c[0] || i <= b->c[0] || r; i++)
{
a->c[i] += b->c[i] + r;
r = a->c[i] / BNMOD;
a->c[i] %= BNMOD;
}
a->c[0] = i-1;
}
void bnmul(bn *a, int val)
{
int i, r;
for(i = 1, r = 0; i <= a->c[0] || r; i++)
{
a->c[i] = val*a->c[i] + r;
r = a->c[i] / BNMOD;
a->c[i] %= BNMOD;
}
a->c[0] = i-1;
}
void inttobn(int val, bn *a)
{
memset(a, 0, sizeof(bn));
a->c[0] = a->c[1] = 1;
bnmul(a, val);
}
void bnshow(bn *a)
{
int i;
printf("%d", a->c[a->c[0]]);
for(i = a->c[0]-1; i; i--)
printf("%03d", a->c[i]);
}
void solve()
{
int i, j, k;
bn tmp;
inttobn(b-1, &a[1][0]);
for(i = 2; i <= n; i++)
{
j = 0;
for(k = 0; k <= p; k++)
{
memcpy(&tmp, &a[i-1][k], sizeof(bn));
bnmul(&tmp, b-1);
bnadd(&a[i][0], &tmp);
}
for(j = 1; j <= p; j++)
memcpy(&a[i][j], &a[i-1][j-1], sizeof(bn));
}
for(i = 0; i <= p; i++)
bnadd(&sola, &a[n][i]);
memset(a, 0, sizeof(a));
inttobn(b-1, &a[1][0]);
for(i = 2; i <= n; i++)
{
j = 0;
for(k = 0; k < q; k++)
{
memcpy(&tmp, &a[i-1][k], sizeof(bn));
bnmul(&tmp, b-1);
bnadd(&a[i][0], &tmp);
}
for(j = 1; j < q; j++)
memcpy(&a[i][j], &a[i-1][j-1], sizeof(bn));
memcpy(&s[i], &s[i-1], sizeof(bn));
bnmul(&s[i], b);
bnadd(&s[i], &a[i-1][q-1]);
}
memcpy(&solb, &s[n], sizeof(bn));
}
int main()
{
freopen("zero.in", "r", stdin);
freopen("zero.out", "w", stdout);
scanf("%d%d%d%d", &n, &b, &p, &q);
solve();
bnshow(&sola);
printf("\n");
bnshow(&solb);
printf("\n");
return 0;
}