#include <bits/stdc++.h>
using namespace std;
template <typename T>
istream &operator>>(istream &in, vector<T> &v) {
  for (size_t i = 0; i < v.size(); ++i) in >> v[i];
  return in;
}
template <typename T>
ostream &operator<<(ostream &out, vector<T> const &v) {
  for (size_t i = 0; i < v.size(); ++i) out << v[i] << " ";
  return out;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &out, pair<T1, T2> const &p) {
  out << p.first << " " << p.second;
  return out;
}
ostream &operator<<(ostream &out, double *const &n) {
  long long v = (long long)((*n) * 1e7);
  char s[32];
  memset(s, '0', 32);
  int c = 0;
  if (v == 0) {
    out.put('0');
    return out;
  }
  if (v < 0) {
    out.put('-');
    v = -v;
  }
  while (v > 0 && c < 32) {
    s[c++] = v % 10 + '0';
    v /= 10;
  }
  c = max(c, 8);
  for (int i = c - 1; i >= 0; --i) {
    if (i == 6) out.put('.');
    out.put(s[i]);
  }
  return out;
}
template <typename T>
T ternary_search(T left, T right, T func(T x)) {
  for (int i = 0; i < 120; ++i) {
    T delta = (right - left) / 8.0;
    T mid1 = left + delta * 3.0, mid2 = left + delta * 5.0;
    if (func(mid1) >= func(mid2))
      right = mid2;
    else
      left = mid1;
  }
  return func(right);
}
int MONTHS[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void solution();
int main(int argc, char *argv[]) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  solution();
  return EXIT_SUCCESS;
}
int n, m, k;
long long a[32], b[32][32];
long long dp[1 << 18][18];
void solution() {
  cin >> n >> m >> k;
  for (int i = 0; i < n; ++i) cin >> a[i];
  for (int i = 0; i < 32; ++i)
    for (int j = 0; j < 32; ++j) b[i][j] = -1;
  for (int i = 0; i < k; ++i) {
    int x, y, c;
    cin >> x >> y >> c;
    --x;
    --y;
    b[x][y] = c;
  }
  for (int bm = 0; bm < (1 << n); ++bm) {
    if (bm > 0)
      for (int j = 0; j < n; ++j) {
        if ((bm & (1 << j)))
          for (int i = 0; i < n; ++i)
            if (!(bm & (1 << i))) {
              int bm2 = bm | (1 << i);
              long long s = dp[bm][j] + a[i];
              if (b[j][i] != -1) s += b[j][i];
              dp[bm2][i] = max(dp[bm2][i], s);
            }
      }
    else {
      for (int i = 0; i < n; ++i)
        if (!(bm & (1 << i))) {
          int bm2 = bm | (1 << i);
          long long s = a[i];
          dp[bm2][i] = max(dp[bm2][i], s);
        }
    }
  }
  long long ans = 0;
  for (int bm = 0; bm < (1 << n); ++bm)
    if (__builtin_popcount(bm) == m)
      for (int i = 0; i < n; ++i)
        if ((bm & (1 << i))) {
          ans = max(ans, dp[bm][i]);
        }
  cout << ans;
}
