MTT
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double lld;
const int mo=998244353, N=1e6+5;
struct MTT
{
struct cp
{
lld x,y;
inline void init() { x=y=0; }
cp operator + (const cp& t) const { return {x+t.x,y+t.y}; }
cp operator - (const cp& t) const { return {x-t.x,y-t.y}; }
cp operator * (const cp& t) const { return {x*t.x-y*t.y,x*t.y+y*t.x}; }
}p1[N],p2[N],g[N];
lld Pi=acos(-1);
int rev[N];
void fft(cp *a,int len,int inv)
{
for(int i=0;i<len;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);
for(int mid=1;mid<len;mid<<=1)
{
cp Wn=cp({cos(Pi/mid),inv*sin(Pi/mid)});
for(int i=0;i<len;i+=mid*2)
{
cp w=cp({1,0});
for(int j=0;j<mid;j++,w=w*Wn)
{
cp x=a[i+j],y=w*a[i+j+mid];
a[i+j]=x+y,a[i+j+mid]=x-y;
}
}
}
}
void mul(int *as,int *a,int n,int *b,int m,int mo)
{
for(int i=0;i<n;i++) {
int x=a[i];
int aa=x>>15,bb=x&0x7fff;
p1[i]={(lld)aa,(lld)bb};
p2[i]={(lld)aa,-(lld)bb};
}
for(int i=0;i<m;i++) {
int x=b[i];
int aa=x>>15,bb=x&0x7fff;
g[i]={(lld)aa,(lld)bb};
}
int len=2;
while(len < n+m) len <<= 1;
for(int i=0;i<len;i++) rev[i] = (rev[i>>1]>>1)|((i&1)?len>>1:0);
fft(p1,len,1); fft(p2,len,1); fft(g,len,1);
for(int i=0;i<len;i++) g[i].x/=len,g[i].y/=len;
for(int i=0;i<len;i++) p1[i]=p1[i]*g[i],p2[i]=p2[i]*g[i];
fft(p1,len,-1); fft(p2,len,-1);
for(int i=0;i<m+n;i++)
{
ll ans=0,a1b1=0,a2b2=0,a1b2=0,a2b1=0;
a1b1=(ll)floor((p1[i].x+p2[i].x)/2+0.49)%mo;
a1b2=(ll)floor((p1[i].y+p2[i].y)/2+0.49)%mo;
a2b1=((ll)floor(p1[i].y+0.49)-a1b2)%mo;
a2b2=((ll)floor(p2[i].x+0.49)-a1b1)%mo;
ans=(((((a1b1<<15)%mo+(a1b2+a2b1))%mo)<<15)%mo+a2b2)%mo;
ans+=mo; ans%=mo;
as[i]=ans;
}
for(int i=0;i<len;i++) { p1[i].init(); p2[i].init(); g[i].init(); }
}
}MT;
int f[N], g[N];
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,m,p;
cin>>n>>m>>p;
for(int i=0;i<=n;i++) cin>>f[i];
for(int i=0;i<=m;i++) cin>>g[i];
MT.mul(f,f,n+1,g,m+1,p);
for(int i=0;i<=n+m;i++) cout<<f[i]<<' ';
return 0;
}