#include <bits/stdc++.h>
using namespace std;
vector<int> g[110000];
vector<int> ag[110000];
stack<int> s;
int n, m, x, y, h, u[110000], v[110000], num[110000], sum[110000];
void link(int x, int y) {
  g[x].push_back(y);
  ag[y].push_back(x);
}
void dfs(int x) {
  v[x] = 1;
  for (int i = 0; i < g[x].size(); i++)
    if (!v[g[x][i]]) dfs(g[x][i]);
  s.push(x);
}
void find(int x, int k) {
  num[x] = k;
  sum[k]++;
  for (int i = 0; i < ag[x].size(); i++)
    if (!num[ag[x][i]]) find(ag[x][i], k);
}
int main() {
  std::ios::sync_with_stdio(false);
  cin >> n >> m >> h;
  for (int i = 1; i <= n; i++) cin >> u[i];
  for (int i = 1; i <= m; i++) {
    cin >> x >> y;
    if ((u[x] + 1) % h == u[y]) link(x, y);
    if ((u[y] + 1) % h == u[x]) link(y, x);
  }
  for (int i = 1; i <= n; i++)
    if (!v[i]) dfs(i);
  int k = 0;
  while (!s.empty()) {
    int x = s.top();
    s.pop();
    if (!num[x]) find(x, ++k);
  }
  memset(v, 0, sizeof(v));
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < g[i].size(); j++)
      if (num[i] != num[g[i][j]]) v[num[i]] = 1;
  int ans = 0;
  for (int i = 1; i <= k; i++)
    if (!v[i])
      if (!ans)
        ans = i;
      else if (sum[i] < sum[ans])
        ans = i;
  cout << sum[ans] << endl;
  for (int i = 1; i <= n; i++)
    if (num[i] == ans) cout << i << ' ';
  return 0;
}
