#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll; using namespace std; #ifndef LOCAL #define debug(x) ; #else #define debug(x) cerr << __LINE__ << " : " << #x << " = " << (x) << endl; template ostream &operator<<(ostream &out, const pair &p) { out << "{" << p.first << ", " << p.second << "}"; return out; } template ostream &operator<<(ostream &out, const vector &v) { out << '{'; for (const T &item : v) out << item << ", "; out << "\b\b}"; return out; } #endif #define mod 1000000007 //1e9+7(prime number) #define INF 1000000000 //1e9 #define LLINF 2000000000000000000LL //2e18 #define SIZE 200010 /* Fast Fourier Transform */ namespace FFT { using C = complex; void DFT(vector &a, bool rev = false) { int N = a.size(), h = 0; //const double M_PI = acos(-1); for (int i = 0; 1 << i < N; i++) h++; for (int i = 0; i < N; i++) { int j = 0; for (int k = 0; k < h; k++) j |= (i >> k & 1) << (h - 1 - k); if (i < j) swap(a[i], a[j]); } for (int i = 1; i < N; i *= 2) { for (int j = 0; j < i; j++) { C w = polar(1.0, M_PI / i * (rev ? -1 : 1) * j); for (int k = 0; k < N; k += i*2) { C s = a[j+k], t = a[j+k+i] * w; a[j+k+0] = s + t; a[j+k+i] = s - t; } } } if (rev) for(C &v : a) v /= N; } vector conv(const vector &a, const vector &b) { int s = 1, t = a.size() + b.size() - 1; while(s < t) s *= 2; vector F(s), G(s); for(int i = 0; i < a.size(); i++) F[i] = a[i]; for(int i = 0; i < b.size(); i++) G[i] = b[i]; DFT(F); DFT(G); for(int i = 0; i < s; i++) F[i] *= G[i]; DFT(F, true); vector res(t); for(int i = 0; i < t; i++) res[i] = F[i].real() + 0.5; //round return res; } }; int main(){ int L, M, N, Q; int A, B; scanf("%d%d%d", &L, &M, &N); vector a(N+1), b(N+1); for (int i=0; i