#include <bits/stdc++.h>
using namespace std;
long long powmod(long long a, long long b, long long p) {
  if (b < 0) return 0;
  long long res = 1;
  a %= p;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % p;
    a = a * a % p;
  }
  return res;
}
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
bitset<125> mk;
int m, ans, cnt[125];
void dfs(bitset<125> x, int cur, long long mul) {
  ans = (ans + mul) % 1000000007;
  for (int i = cur; i <= (m >> 1); i++) {
    if (cnt[i] && x[i] == 0 && x[m - i] == 0) {
      dfs(x | x << i | x >> i | x << (m - i) | x >> (m - i), i + 1,
          mul * cnt[i] % 1000000007);
    }
  }
  return;
}
int main() {
  int k;
  scanf("%d", &k);
  scanf("%d%d", &m, &k);
  for (int i = 1; i <= k; i++) {
    int x;
    scanf("%d", &x);
    x %= m;
    cnt[min(x, m - x)]++;
  }
  mk[0] = 1;
  dfs(mk, 1, 1);
  printf("%d", ans);
  return 0;
}
