#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <fstream>
#include <string>
#include <math.h>
#include <cstdlib>
#include <istream>
#include <sstream>
#include <cctype>
#include <iomanip>
//cout << fixed << setprecision(20) << *** << endl;
#define rep(i,N) for(int i=0;i<(int)N;++i)
typedef long long ll;
using namespace std;
int main()
{
	ll A,B,M,t;
	vector<ll>AA,BB,ANS;
	cin>>A>>B>>M;
	rep(i,A){
		cin>>t;
		AA.push_back(t);
	}
	rep(i,B){
		cin>>t;
		BB.push_back(t);
	}
	rep(i,M){
		ll x,y,z,zz;
		cin>>x>>y>>z;
		zz=AA[x-1]+BB[y-1]-z;
		ANS.push_back(zz);
	}
	sort(AA.begin(),AA.end());
	sort(BB.begin(),BB.end());
	ANS.push_back(AA[0]+BB[0]);
	sort(ANS.begin(),ANS.end());
	cout<<ANS[0]<<endl;
}
#include <bits/stdc++.h>
using namespace std;

int main() {
  int A, B, M;
  cin >> A >> B >> M;
  vector<int>a(A);
  vector<int>b(B);
  vector<vector<int>>xyc(3, vector<int>(M));
  for(int i=0; i<A; i++)cin >> a.at(i);
  for(int i=0; i<B; i++)cin >> b.at(i);
  for(int i=0; i<M; i++){
    for(int j=0; j<3; j++){
      cin >> xyc.at(j).at(i);
    }
  }
  
  int mina = a.at(0);
  int minb = b.at(0);
  for(int i=0; i<A; i++){
    if(mina > a.at(i))mina = a.at(i);
  }
  for(int i=0; i<B; i++){
    if(minb > b.at(i))minb = b.at(i);
  }
  
  int ans = mina + minb;
  
  for(int i=0; i<M; i++){
    int waribiki = a.at(xyc.at(0).at(i)-1) + b.at(xyc.at(1).at(i)-1) - xyc.at(2).at(i);
    if(ans > waribiki)ans = waribiki;
  }
  
  cout << ans << endl;
}