#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 + 10;
int n, m, k;
string l[maxn];
int t[maxn], T;
int w[5][3];
vector<pair<int, int> > v;
pair<pair<int, int>, pair<int, int> > a[maxn];
int vis[24 * 30 * 60 + 10];
int cor[24 * 30 * 60 + 10];
int dp[maxn][24 * 30 * 60 + 10];
int par[maxn][24 * 30 * 60 + 10];
inline bool cmp(pair<pair<int, int>, pair<int, int> > fi,
                pair<pair<int, int>, pair<int, int> > se) {
  return fi.first.second < se.first.second;
}
inline int solve(int work, int time) {
  time++;
  int &ret = dp[work][time];
  if (ret > -1) return ret;
  if (work == 0) return ret = 0;
  int need = t[a[work].first.first];
  if (need <= time) {
    int Max = solve(work - 1, min(time - 1 - need, a[work - 1].first.second)) +
              a[work].second.first;
    int Max_ = solve(work - 1, min(time - 1, a[work - 1].first.second));
    if (Max > Max_) par[work][time] = 1;
    return ret = max(Max, Max_);
  } else
    return ret = solve(work - 1, min(time - 1, a[work - 1].first.second));
}
inline void Out_(int Time) {
  int t = cor[Time];
  cout << t / 1440 + 1 << " ";
  int p, q;
  t %= 1440;
  p = t / 60;
  q = t % 60;
  if (p < 10)
    cout << '0' << p << ':';
  else
    cout << p << ':';
  if (q < 10)
    cout << '0' << q;
  else
    cout << q;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m >> k;
  for (int i = 1; i <= n; ++i) cin >> l[i];
  for (int i = 1; i <= n; ++i) cin >> t[i];
  for (int i = 1; i <= 4; ++i) {
    int p, q;
    int p_, q_;
    char g, g_;
    cin >> p >> g >> q >> g_ >> p_ >> g >> q_;
    w[i][1] = p * 60 + q;
    w[i][2] = p_ * 60 + q_;
  }
  for (int i = 1; i <= k; ++i)
    for (int j = 1; j <= 4; ++j)
      v.push_back(pair<int, int>(24 * 60 * (i - 1) + w[j][1],
                                 24 * 60 * (i - 1) + w[j][2]));
  for (int i = 0; i < v.size(); ++i)
    for (int j = v[i].first; j <= v[i].second; ++j) vis[j] = 1;
  int cp = m;
  for (int i = 1, cur = 1; i <= m; ++i, cur++) {
    string hlp;
    cin >> hlp;
    for (int j = 1; j <= n; ++j)
      if (hlp == l[j]) a[i].first.first = j;
    int day;
    cin >> day;
    int p, q;
    char g;
    cin >> p >> g >> q;
    a[i].first.second = (day - 1) * 24 * 60 + p * 60 + q;
    cin >> a[i].second.first;
    a[i].second.second = cur;
    if (a[i].first.first == 0) {
      a[m] = a[i];
      i--;
      m--;
    }
  }
  for (int i = 1; i <= m; ++i) {
    int q = 0;
    bool flag = false;
    for (int j = 0; j < v.size(); ++j)
      if (a[i].first.second >= v[j].first)
        if (a[i].first.second > v[j].second)
          q += v[j].second - v[j].first + 1;
        else {
          q += a[i].first.second - v[j].first + 1;
          flag = true;
        }
    a[i].first.second -= q;
    if (flag == false) a[i].first.second--;
  }
  sort(a + 1, a + 1 + m, cmp);
  int cur = 0;
  for (int i = 0; i < k * 24 * 60; ++i)
    if (vis[i] == 0) {
      cor[cur++] = i;
      T++;
    }
  T--;
  memset(dp, -1, sizeof dp);
  cout << solve(m, min(a[m].first.second, T)) << endl;
  vector<int> ans;
  int ind, time;
  time = min(a[m].first.second, T);
  ind = m;
  for (; ind > 0;) {
    time++;
    int need = t[a[ind].first.first];
    int nex = par[ind][time];
    if (nex == 1) {
      ans.push_back(ind);
      time = min(time - 1 - need, a[ind - 1].first.second);
      ind--;
    } else {
      time = min(time - 1, a[ind - 1].first.second);
      ind--;
    }
  }
  cout << ans.size() << endl;
  int Min = 0;
  for (int i = ans.size() - 1; i >= 0; --i) {
    cout << a[ans[i]].second.second << " ";
    Out_(Min);
    cout << " ";
    Out_(Min + t[a[ans[i]].first.first] - 1);
    cout << endl;
    Min += t[a[ans[i]].first.first];
  }
  return 0;
}
