#include <bits/stdc++.h>
using namespace std;
template <typename S, typename T>
inline bool Min(S& a, const T& b) {
  return a > b ? a = b, true : false;
}
template <typename S, typename T>
inline bool Max(S& a, const T& b) {
  return a < b ? a = b, true : false;
}
template <class T>
inline bool IsPri(T x) {
  if (x < 2) return false;
  for (T i = 2; i * i <= x; ++i)
    if (x % i == 0) return false;
  return true;
}
template <class T>
T gcd(T a, T b) {
  a = abs(a), b = abs(b);
  return b == 0 ? a : gcd(b, a % b);
};
template <typename T>
inline int _BitCnt(T x) {
  int cnt = 0;
  while (x) ++cnt, x &= x - 1;
  return cnt;
}
template <class T>
double dpow(double a, T b) {
  double res = 1.0;
  for (; b > 0; b >>= 1) {
    if (b & 1) res = res * a;
    a = a * a;
  }
  return res;
}
inline int read() {
  static char buf[1000000], *p1 = buf, *p2 = buf;
  int x = false;
  char ch =
      p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2)
          ? EOF
          : *p1++;
  ;
  bool sgn = false;
  while (ch != '-' && (ch < '0' || ch > '9'))
    ch = p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2)
             ? EOF
             : *p1++;
  ;
  if (ch == '-')
    sgn = true,
    ch = p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2)
             ? EOF
             : *p1++;
  ;
  while (ch >= '0' && ch <= '9')
    x = (x << 1) + (x << 3) + (ch ^ 48),
    ch = p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2)
             ? EOF
             : *p1++;
  ;
  return sgn ? -x : x;
}
long long qpow(long long a, long long b, long long mod) {
  long long res = 1;
  for (; b > 0; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, -1, 1};
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int N = 1e6 + 10;
const double PI = acos(-1.0);
const double E = exp(1.0);
const double EPS = 1e-8;
long long d[N][20];
long long val[20];
long long dis[20][20];
int main() {
  int n, m, kn;
  cin >> n >> m >> kn;
  for (int i = 1; i <= n; i++) cin >> val[i];
  for (int i = 1; i <= kn; i++) {
    int x, y;
    long long c;
    cin >> x >> y >> c;
    dis[x][y] = c;
  }
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    d[1 << (i - 1)][i] = val[i];
  }
  for (int i = 0; i < (1 << n); i++) {
    for (int j = 1; j <= n; j++) {
      if (((i >> (j - 1)) & 1) == 1) {
        for (int k = 1; k <= n; k++) {
          if (((i >> (k - 1)) & 1) == 0) {
            Max(d[i + (1 << (k - 1))][k], d[i][j] + val[k] + dis[j][k]);
          }
          if (_BitCnt(i + (1 << (k - 1))) == m) {
            Max(ans, d[i + (1 << (k - 1))][k]);
          }
        }
        if (_BitCnt(i) == m) {
          Max(ans, d[i][j]);
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
