#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 5;
const int S = 1 << 5;
int n, m, k;
int c[N];
vector<int> g[N];
long long dp[S][N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> k;
for (int i = 1; i <= n; i++) {
cin >> c[i];
c[i]--;
}
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
for (int i = 1; i <= n; i++) {
dp[1 << c[i]][i] = 1;
}
int lim = 1 << k;
for (int mask = 1; mask < lim; mask++) {
if (__builtin_popcount(mask) == 1) continue;
for (int v = 1; v <= n; v++) {
if (((mask >> c[v]) & 1) == 0) continue;
int pmask = mask ^ (1 << c[v]);
long long cur = 0;
for (int u : g[v]) {
if ((pmask >> c[u]) & 1) {
cur += dp[pmask][u];
}
}
dp[mask][v] = cur;
}
}
long long ans = 0;
for (int mask = 1; mask < lim; mask++) {
if (__builtin_popcount(mask) < 2) continue;
for (int v = 1; v <= n; v++) {
ans += dp[mask][v];
}
}
cout << ans << '\n';
return 0;
}