#include <bits/stdc++.h>
using namespace std;
int i, j, k, l, n, m, s, tot, ss, t;
const int pp = 1000000007;
long long a[100010], an;
void dfs(int x, bitset<120> y, long long s) {
  if (x > m / 2) {
    an = (an + s) % pp;
    return;
  }
  dfs(x + 1, y, s);
  if ((a[x]) && (!y[x]))
    dfs(x + 1, y | (y << x) | (y >> x) | (y << (m - x)) | (y >> (m - x)),
        (s * a[x]) % pp);
}
int main() {
  scanf("%d%d%d", &n, &m, &t);
  for (int i = 1; i <= t; i++) {
    int x;
    scanf("%d", &x);
    x %= m;
    a[min(x, m - x)]++;
  }
  dfs(0, bitset<120>(1), 1);
  printf("%I64d", an);
  return 0;
}
