#include <bits/stdc++.h>
using namespace std;
char buf[1048576], *p0, *p1;
inline int read() {
  int r = 0;
  char c =
      (p0 == p1 && (p1 = (p0 = buf) + fread(buf, 1, 1048576, stdin), p0 == p1)
           ? EOF
           : *p0++);
  while (c < 48 || c > 57)
    c = (p0 == p1 && (p1 = (p0 = buf) + fread(buf, 1, 1048576, stdin), p0 == p1)
             ? EOF
             : *p0++);
  while (c > 47 && c < 58) {
    r = (r << 3) + (r << 1) + (c ^ 48);
    c = (p0 == p1 && (p1 = (p0 = buf) + fread(buf, 1, 1048576, stdin), p0 == p1)
             ? EOF
             : *p0++);
  }
  return r;
}
int a[2005], b[2005], d[2005], s[2005], t[2005], c[2005];
map<pair<int, int>, int> p;
vector<pair<int, int> > g, e[2005];
void color(int u, int v, int w, int x) {
  for (auto &i : e[v])
    if (i.first == w) {
      i.first = x;
      color(v, i.second, x, w);
    }
  for (auto &i : e[v])
    if (i.second == u) i.first = w;
}
int main() {
  int n = read(), m, q, u, v, w, x;
  m = read();
  q = read();
  for (int i = 0; i < n; ++i) read();
  for (int i = 0; i < m; ++i) {
    a[i] = read();
    b[i] = read();
    if (a[i] > b[i]) swap(a[i], b[i]);
    ++d[a[i]];
    ++d[b[i] + n];
  }
  for (int i = t[0] = 1; i <= (n << 1); ++i) {
    s[i] = (d[i] + q - 1) / q;
    t[i] = s[i - 1] + t[i - 1];
  }
  for (int i = 0; i < m; ++i) {
    g.emplace_back(t[u = a[i]], t[v = b[i] + n]);
    p[g.at(i)] = i;
    e[t[u]].emplace_back(0x3fffffff, t[v]);
    e[t[v]].emplace_back(0x3fffffff, t[u]);
    if ((++c[u]) == q) {
      ++t[u];
      c[u] = 0;
    }
    if ((++c[v]) == q) {
      ++t[v];
      c[v] = 0;
    }
  }
  for (const auto &i : g) {
    u = i.first;
    v = i.second;
    w = x = 0;
    sort(e[u].begin(), e[u].end());
    sort(e[v].begin(), e[v].end());
    for (int j = 0, k = e[u].size(); j < k; ++j)
      if (e[u].at(j).first != j + 1) {
        w = j + 1;
        break;
      }
    for (int j = 0, k = e[v].size(); j < k; ++j)
      if (e[v].at(j).first != j + 1) {
        x = j + 1;
        break;
      }
    for (auto &j : e[u])
      if (j.second == v) j.first = w;
    color(u, v, w, x);
  }
  for (int i = 1; i <= t[n]; ++i)
    for (const auto j : e[i])
      if (i < j.second) a[p[make_pair(i, j.second)]] = j.first;
  for (int i = 0; i < m; ++i) printf("%d\n", a[i]);
  return 0;
}
