#include<bits/stdc++.h>
using namespace std;
int q[50][50],t[50],p[50],maxx;
int n,m;
struct node{
int w;
string name;
}a[40];
map<string,int> ma;
void dfs(int x,int zhi){
if(x>6||x>n){
for(int i=1;i<x;++i)
for(int j=i;j<x;++j)
if(q[t[i]][t[j]]) zhi+=q[t[i]][t[j]];
if(zhi>maxx) maxx=zhi;
return ;
}
for(int i=1;i<=n;++i)
if(!p[i]){
p[i]=1;t[x]=i;
dfs(x+1,zhi+a[i].w);
p[i]=0;
}
}
signed main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;++i)
{
cin>>a[i].name>>a[i].w;
ma[a[i].name]=i;
}
for(int i=1;i<=m;++i)
{
string s,s1;int e;
cin>>s>>s1>>e;
q[ma[s]][ma[s1]]+=e;
q[ma[s1]][ma[s]]+=e;
}
dfs(1,0);
cout<<maxx;
return 0;
}