#include<bits/stdc++.h>
#define int long long
#define MAXN 5010
#define INF 1145141919810
using namespace std;
int n , m;
int a[MAXN];
struct node{
int indx;
int suM;
}b[MAXN];
int dp[MAXN][MAXN] , sum[MAXN];
int S[MAXN];
bool cmp(node x , node y) {
return x.indx < y.indx ;
}
signed main() {
cin >> n >> m;
for (int i = 1 ; i <= n ; i++) {
cin >> a[i];
}
for (int i = 1 ; i <= m ; i++) {
cin >> b[i].indx >> b[i].suM ;
}
sort(a + 1 , a + 1 + n);
sort(b + 1 , b + 1 + m , cmp);
for (int i = 1 ; i <= m ; i++) {
S[i] += S[i-1] + b[i].suM ;
}
if(S[m] < n) {
cout << -1 ;
return 0;
}
int q[MAXN] = {0}, t , f ;
memset (dp , INF , sizeof(dp));
dp[0][0] = 0;
for (int i = 1 ; i <= m ; i++) {
t = 1;
f = 0;
dp[i][0] = 0 , q[t] = 0;
for (int j = 1 ; j <= S[i] && j <= n ; j++ ) {
dp[i][j] = dp[i-1][j];
sum[j] = sum[j - 1] + abs(a[j] - b[i].indx);
while ((j - q[f] > b[i].suM) || f <= t && dp[i - 1][q[f]] - sum[q[f]] > dp[i - 1][j] - sum[j]) f++;
q[++t] = j;
dp[i][j] = min(dp[i][j] , sum[j] + dp[i - 1][q[f]] - sum[q[f]]);
// cout << dp[i][j] << endl;
}
}
cout << dp[m][n] ;
return 0;
}