#include using namespace std; #define int long long using ll=long long; using vi=vector; using vl=vector; using pii=pair; using pll=pair; #define ITR(i,c) for(auto i=begin(c);i!=end(c);++i) #define FORE(x,c) for(auto &x:c) #define FOR(i,a,n) for(int i=a,i##_len=(int)(n);i=0;--i) #define ALL(c) begin(c),end(c) #define RALL(c) rbegin(c),rend(c) // c++14 #define SZ(c) ((int)c.size()) #define EXIST(c,x) (c.find(x)!=end(c)) #define OUTOFRANGE(y,x,h,w) (y<0||x<0||y>=h||x>=w) #define dump(...) const int DX[9]={0,1,0,-1,1,1,-1,-1,0},DY[9]={-1,0,1,0,-1,1,1,-1,0}; #define INF (1001001001) #define INFLL (1001001001001001001ll) template ostream& operator << (ostream &os,const vector &v) { ITR(i,v) os << *i << (i==end(v)-1 ? "" : "\n"); return os; } template istream& operator >> (istream &is,vector &v) { ITR(i,v) is >> * i; return is; } template istream& operator >> (istream &is, pair &p) { is >> p.first >> p.second; return is; } templatebool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b0) { if(b&1) { product*=a; product%=MOD; } a*=a; a%=MOD; b>>=1; } return product%MOD; } void init_fact() { fact[0]=1, fact_inv[0]=1; FOR(i,1,MAX_N) { fact[i]=(fact[i-1]*i)%MOD; fact_inv[i]=mod_pow(fact[i],MOD-2); } } signed main() { init_fact(); int gx,gy,K; cin>>gx>>gy>>K; vi x(K),y(K),N(5,0); REP(i,K) { cin>>x[i]>>y[i]>>N[i]; } int ans=0; REP(i,N[0]+1) { REP(j,N[1]+1) { REP(k,N[2]+1) { REP(l,N[3]+1) { REP(m,N[4]+1) { int X=0,Y=0; if(N[0]!=0) X+=x[0]*i, Y+=y[0]*i; if(N[1]!=0) X+=x[1]*j, Y+=y[1]*j; if(N[2]!=0) X+=x[2]*k, Y+=y[2]*k; if(N[3]!=0) X+=x[3]*l, Y+=y[3]*l; if(N[4]!=0) X+=x[4]*m, Y+=y[4]*m; if(X==gx && Y==gy) { int c=1; c*=fact[i+j+k+l+m]; c*=fact_inv[i]; c%=MOD; c*=fact_inv[j]; c%=MOD; c*=fact_inv[k]; c%=MOD; c*=fact_inv[l]; c%=MOD; c*=fact_inv[m]; c%=MOD; ans+=c; } } } } } } cout<