#include #include #define rep(i,b) for(int i=0;i=0;i--) #define rep1(i,b) for(int i=1;i using mpq = priority_queue, greater>; template bool chmax(T &a, const T &b) { if (a bool chmin(T &a, const T &b) { if (b ll sumv(const vector&a){ll res(0);for(auto&&x:a)res+=x;return res;} bool yn(bool a) { if(a) {cout << "Yes" << endl; return 1;} else {cout << "No" << endl; return 0;}} #define dame { cout << "No" << endl; return 0;} #define dame1 { cout << -1 << endl; return 0;} #define test(x) cout << "test" << x << endl; #define deb(x,y) cout << x << " " << y << endl; #define deb3(x,y,z) cout << x << " " << y << " " << z << endl; #define deb4(x,y,z,x2) cout << x << " " << y << " " << z << " " << x2 << endl; #define out cout << ans << endl; #define outv fore(yans , ans) cout << yans << "\n"; #define show(x) cerr<<#x<<" = "<; using pil = pair; using pli = pair; using pii = pair; using tp = tuple; using vi = vector; using vl = vector; using vs = vector; using vb = vector; using vpii = vector; using vpli = vector; using vpll = vector; using vpil = vector; using vvi = vector>; using vvl = vector>; using vvs = vector>; using vvb = vector>; using vvpii = vector>; using vvpli = vector>; using vvpll = vector; using vvpil = vector; using mint = modint1000000007; using vm = vector; using vvm = vector>; vector dx={1,0,-1,0,1,1,-1,-1},dy={0,1,0,-1,1,-1,1,-1}; ll gcd(ll a, ll b) { return a?gcd(b%a,a):b;} ll lcm(ll a, ll b) { return a/gcd(a,b)*b;} const double eps = 1e-10; const ll LINF = 1001002003004005006ll; const int INF = 1001001001; int len = 110; vvm f(vvm a1,vvm a2){ vvm ret(len , vm(len)); rep(i,len) rep(j,len) rep(k,len) ret[i][j] += a1[i][k] * a2[k][j]; return ret; } int main(){ ll l,n,m; cin>>l>>n>>m; l--; map mp; rep(i,m){ int k; cin>>k; k--; mp[k] = 0; } // if (l == 1){ // if (mp.count(0)) cout << n-1 << endl; // else cout << n << endl; // return 0; // } vvm a(len , vm(len)); rep(i,len){ int ni = i / 11; int ci = i % 11; if (ni >= n) continue; queue q; int nci = min(10 , ci+1); q.push(ni * 11 + nci); if (ni != ci || mp.count(ni) == 0){ rep(j,n){ if (j == ni) continue; int cj = 0; int nxt = j * 11 + cj; q.push(nxt); } } while(!q.empty()){ int p = q.front(); q.pop(); a[p][i] += 1; } } vvm now(len , vm(len)); rep(i,len) now[i][i] = 1; const int logmax = 64; vector v(logmax , vvm(len , vm(len))); v[0] = a; rep1(i,logmax) v[i] = f(v[i-1] , v[i-1]); rep(i,logmax){ if ((l >> i & 1) == 1) now = f(now , v[i]); } mint ans = 0; rep(i,n){ rep(j,len){ int nj = j / 11; int cj = j % 11; if (nj == cj && mp.count(nj)) continue; ans += now[j][i*11]; } } ans = mint(n).pow(l+1) - ans; cout << ans.val() << endl; return 0; }