#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimization("unroll-loops")
const long long mod = 1000000007;
const long long inf = 1000000009;
const long long INF = 1000000000000000009;
const long long big = 1000000000000000;
const long double eps = 0.000000000000000000001;
using namespace std;
vector<pair<long long, long long> > P[105];
long long T[105][1005], K[1005], O[1005];
void solve() {
  long long n, m, k;
  cin >> n >> m >> k;
  for (long long i = 1; i <= n; i++) {
    long long a;
    cin >> a;
  }
  for (long long i = 1; i <= m; i++) {
    long long a, b;
    cin >> a >> b;
    P[a].push_back(make_pair(b, i));
    P[b].push_back(make_pair(a, i));
    long long x = min_element(T[a] + 1, T[a] + k + 1) - T[a];
    long long y = min_element(T[b] + 1, T[b] + k + 1) - T[b];
    T[a][x]++;
    T[b][x]++;
    K[i] = x;
    O[i] = i;
    long long czy = 0;
    if (T[b][x] - T[b][y] > 2) czy = 1;
    long long u = b;
    while (czy) {
      czy = 0;
      for (auto v : P[u]) {
        if (O[v.second] != i && K[v.second] == x) {
          O[v.second] = i;
          K[v.second] = y;
          T[u][x]--;
          T[u][y]++;
          T[v.first][x]--;
          T[v.first][y]++;
          u = v.first;
          czy = 1;
          swap(x, y);
          break;
        }
      }
    }
  }
  for (long long i = 1; i <= m; i++) cout << K[i] << "\n";
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
