#include <bits/stdc++.h>
using namespace std;
long long N, M, T, x, ans;
long long c[200];
const long long cc = 1000000007;
void dfs(long long x, bitset<120> y, long long w) {
  if (x > M / 2) {
    ans = (ans + w) % cc;
    return;
  }
  dfs(x + 1, y, w);
  if (c[x] && !y[x])
    dfs(x + 1, y | (y << x) | (y >> x) | (y << (M - x)) | (y >> (M - x)),
        w * c[x] % cc);
}
int main() {
  scanf("%I64d%I64d%I64d", &N, &M, &T);
  for (long long i = 1; i <= T; i++) {
    scanf("%I64d", &x);
    x = x % M;
    c[min(x, M - x)]++;
  }
  dfs(0, bitset<120>(1), 1);
  printf("%I64d", ans);
}
