#include <bits/stdc++.h>
using namespace std;
template <typename Arg1>
void __f(Arg1&& arg1) {
  cout << arg1 << "\n";
}
template <typename Arg1, typename... Args>
void __f(Arg1&& arg1, Args&&... args) {
  cout << arg1 << " ";
  __f(args...);
}
template <typename Arg1>
void __g(Arg1&& arg1) {
  cin >> arg1;
}
template <typename Arg1, typename... Args>
void __g(Arg1&& arg1, Args&&... args) {
  cin >> arg1;
  __g(args...);
}
const int N = 2005, inf = 1e9;
int n, m, k;
int bst[N] = {};
vector<pair<int, int> > ofr;
int csum[N], dp[N][N];
inline int rangesum(int l, int r) {
  int ans = csum[r];
  if (l - 1 >= 0) ans -= csum[l - 1];
  return ans;
}
inline int minpos(int idx, int oidx) {
  if (idx < 0) return 0;
  if (oidx >= m) return inf;
  if (ofr[oidx].first > idx + 1) return inf;
  int& ans = dp[idx][oidx];
  if (ans != -1) return ans;
  int tot = ofr[oidx].first, disc = ofr[oidx].second;
  int pay = tot - disc;
  ans = min(minpos(idx, oidx + 1),
            rangesum(idx - pay + 1, idx) + minpos(idx - tot, 0));
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  memset(dp, -1, sizeof dp);
  cin >> n >> m >> k;
  vector<int> vec(n);
  for (int i = 0; i < n; ++i) {
    cin >> vec[i];
  }
  sort(vec.begin(), vec.end());
  n = k;
  vec.resize(k);
  csum[0] = vec[0];
  for (int i = 1; i < n; ++i) {
    csum[i] = csum[i - 1] + vec[i];
  }
  for (int i = 0; i < m; ++i) {
    int x, y;
    cin >> x >> y;
    if (x > k) continue;
    bst[x] = max(bst[x], y);
  }
  for (int i = 1; i <= k; ++i) {
    if (!bst[i]) continue;
    ofr.push_back({i, bst[i]});
  }
  ofr.push_back({1, 0});
  sort(ofr.begin(), ofr.end());
  m = ofr.size();
  cout << minpos(n - 1, 0);
  return 0;
}
