#include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; template class Matrix{ private: int ro, co; vector> vec; public: Matrix(): Matrix(0, 0) {} Matrix(const int _ro, const int _co, const T _e=0): ro(_ro), co(_co), vec(_ro, vector(_co, _e)) {} int row() const { return ro; } int col() const { return co; } vector operator[](int i) const { return vec[i]; } vector &operator[](int i){ return vec[i]; } Matrix &operator*=(const Matrix &rhs){ assert(ro==co && rhs.row()==rhs.col() && co==rhs.col()); return *this = (*this)*rhs; } Matrix operator*(const Matrix &rhs) const { assert(co==rhs.row()); Matrix res(ro, rhs.col()); for(int i=0; i pow(long long n) const { assert(ro==co); Matrix res(ro, co); for(int i=0; i x = *this; while(n){ if(n&1) res *= x; x *= x; n >>= 1; } return res; } }; int main(){ ll N; cin >> N; int M, K; cin >> M >> K; map cnt; for(int i=1; i<=M; i++){ int d = M/i; cnt[d]++; } vector comp; for(auto [key,val]:cnt){ comp.emplace_back(key); } int siz = comp.size(); Matrix mat(siz, siz); for(int i=0; i vec(siz, 1); for(int i=0; i