#include using namespace std; #define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++) #define rep(i,n) repl(i,0,n) #define mp(a,b) make_pair((a),(b)) #define pb(a) push_back((a)) #define all(x) (x).begin(),(x).end() #define uniq(x) sort(all(x)),(x).erase(unique(all(x)),end(x)) #define fi first #define se second #define dbg(x) cout<<#x" = "<<((x))< ostream& operator<<(ostream& o, const pair &p){o<<"("< ostream& operator<<(ostream& o, const vector &v){o<<"[";for(T t:v){o<>gx>>gy>>k; map>, long> crnt; crnt[mp(0,mp(0,0))] = 1; rep(_,k){ map>, long> nxt(crnt); int x,y,n; cin>>x>>y>>n; for(auto &p : crnt){ repl(i,1,n+1){ (nxt[mp(p.fi.fi+i, mp(p.fi.se.fi+x*i, p.fi.se.se+y*i))] += p.se * comb[p.fi.fi+i][i] %MOD)%=MOD; } } swap(crnt, nxt); } long ans = 0; for(auto &p : crnt) if(p.fi.se.fi==gx && p.fi.se.se==gy) ans += p.se; cout << ans %MOD << endl; return 0; }