#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int SIZE = 200005;
int main() {
  long long n, k, m, tempoChegou = 0;
  set<long long> taxis;
  set<long long, greater<long long> > taxisInvertido;
  priority_queue<pair<long long, long long>,
                 vector<pair<long long, long long> >,
                 greater<pair<long long, long long> > >
      houses[SIZE];
  priority_queue<pair<long long, pair<long long, long long> >,
                 vector<pair<long long, pair<long long, long long> > >,
                 greater<pair<long long, pair<long long, long long> > > >
      taxisOcupados;
  cin >> n >> k >> m;
  for (int i = 1; i <= k; i++) {
    long long x;
    cin >> x;
    if (houses[x].empty()) {
      taxis.insert(x);
      taxisInvertido.insert(x);
    }
    houses[x].push(make_pair(0, i));
  }
  for (int i = 0; i < m; i++) {
    long long t, a, b, tempoEspera = 0;
    cin >> t >> a >> b;
    while (!taxisOcupados.empty() && taxisOcupados.top().first <= t) {
      pair<long long, pair<long long, long long> > novoTaxiLivre =
          taxisOcupados.top();
      taxisOcupados.pop();
      if (houses[novoTaxiLivre.second.second].empty()) {
        taxis.insert(novoTaxiLivre.second.second);
        taxisInvertido.insert(novoTaxiLivre.second.second);
      }
      houses[novoTaxiLivre.second.second].push(
          make_pair(novoTaxiLivre.first, novoTaxiLivre.second.first));
    }
    if (taxis.empty()) {
      long long tf = taxisOcupados.top().first;
      tempoChegou = tf;
      while (!taxisOcupados.empty() && taxisOcupados.top().first <= tf) {
        pair<long long, pair<long long, long long> > novoTaxiLivre =
            taxisOcupados.top();
        taxisOcupados.pop();
        if (houses[novoTaxiLivre.second.second].empty()) {
          taxis.insert(novoTaxiLivre.second.second);
          taxisInvertido.insert(novoTaxiLivre.second.second);
        }
        houses[novoTaxiLivre.second.second].push(
            make_pair(novoTaxiLivre.first, novoTaxiLivre.second.first));
      }
    }
    auto it1 = taxis.lower_bound(a);
    auto it2 = taxisInvertido.lower_bound(a);
    long long posEscolhida;
    if (it1 == taxis.end()) {
      posEscolhida = *it2;
    } else if (it2 == taxisInvertido.end()) {
      posEscolhida = *it1;
    } else if (abs(*it1 - a) < abs(*it2 - a)) {
      posEscolhida = *it1;
    } else if (abs(*it1 - a) > abs(*it2 - a)) {
      posEscolhida = *it2;
    } else {
      long long pos1 = *it1;
      long long pos2 = *it2;
      if (houses[pos1].top() < houses[pos2].top()) {
        posEscolhida = pos1;
      } else {
        posEscolhida = pos2;
      }
    }
    pair<long long, long long> taxiEscolhido = houses[posEscolhida].top();
    houses[posEscolhida].pop();
    if (houses[posEscolhida].empty()) {
      taxis.erase(posEscolhida);
      taxisInvertido.erase(posEscolhida);
    }
    tempoEspera = max(t, tempoChegou) - t + abs(posEscolhida - a);
    taxisOcupados.push(make_pair(t + tempoEspera + abs(b - a),
                                 make_pair(taxiEscolhido.second, b)));
    cout << taxiEscolhido.second << " " << tempoEspera << endl;
  }
  return 0;
}
