#include <bits/stdc++.h>   using namespace std;   const long long mod = 1e9 + 7;   const long long MAX = 105;   long long n, m, x, y, z, k;   struct Matrix {     long long row, col;     long long m[MAX][MAX];   };   Matrix Multiply(Matrix A, Matrix B) {     Matrix ans;     ans.row = A.row;     ans.col = B.col;     for (long long i = 1; i <= A.row; i++) {       for (long long j = 1; j <= B.col; j++) {         ans.m[i][j] = 0;         for (long long k = 1; k <= A.col; k++) {           ans.m[i][j] += (A.m[i][k] * B.m[k][j]) % mod;           if (ans.m[i][j] >= mod) ans.m[i][j] -= mod;         }       }     }     return ans;   }   Matrix Power(Matrix mat, long long p) {     Matrix res;     Matrix ans;     ans.row = res.row = mat.row;     ans.col = res.col = mat.col;     long long n = ans.row;     for (long long i = 1; i <= n; i++) {       for (long long j = 1; j <= n; j++) {         ans.m[i][j] = 0;         res.m[i][j] = mat.m[i][j];       }       ans.m[i][i] = 1;     }     while (p) {       if (p % 2 == 1) ans = Multiply(ans, res);       res = Multiply(res, res);       p = p / 2;     }     return ans;   }   Matrix power(Matrix mat, long long p) {     if (p == 1) return mat;     if (p & 1) return Multiply(mat, power(mat, p - 1));     Matrix re = power(mat, (p / 2));     return Multiply(re, re);   }   Matrix mat;   long long ara[MAX];   int main() {     cin >> n >> k;     for (long long i = 1; i <= n; i++) {       scanf( %lld , &ara[i]);     }     if (k == 1) {       cout << n << endl;       return 0;     }     mat.row = mat.col = n;     for (long long i = 1; i <= n; i++) {       for (long long j = 1; j <= n; j++) {         long long val = ara[i] ^ ara[j];         if (__builtin_popcountll(val) % 3 == 0)           mat.m[i][j] = 1;         else           mat.m[i][j] = 0;       }     }     mat = power(mat, k - 1);     long long ans = 0;     for (long long i = 1; i <= n; i++) {       for (long long j = 1; j <= n; j++) {         ans = (ans + mat.m[i][j]);         if (ans >= mod) ans -= mod;       }     }     cout << ans << endl;     return 0;   }   