#include #include #include using namespace std; using ll = long long; ll mod = 998244353; struct Matrix{ int r, c; vector> a; Matrix(int r, int c) :r(r), c(c), a(r, vector(c, 0)){} static Matrix iden(int n){ //正方行列限定 Matrix I(n, n); for(int i=0; i=mod) a[i][j]-=mod; } return *this; } Matrix& operator-=(const Matrix& rhs) { //assert(r==rhs.r&&c==rhs.c); for(int i=0; i mul_vec(const vector& v) const { //assert(c == (int)v.size()); vector res(r, 0); for(int i=0;i>=1; } return R; } int main(void){ int n, m, k; cin >> n >> m >> k; int mx=(1<=k) A.a[i][j]=1; } auto B=pow(A, m-1); vector p(mx, 1); auto v=B.mul_vec(p); ll ans=0; for(auto p:v) ans+=p, ans%=mod; cout << ans << endl; return 0; }