#include <iostream>
#include <string>
#include <cstdlib>
#include <vector>
#include <array>
#include <map>
#include <set>
#include <algorithm>
#include <queue>
#include <stack>
#define _USE_MATH_DEFINES
#include <cmath>
#include <climits>
#include <cstdio>
#include <iomanip>
#include <utility>
#include <unordered_map>
#include <numeric>

using namespace std;
typedef long long int ll;

#define SP(x) setprecision((int)x)
#define SW(x) setw(x)    // 桁数指定
#define SF(c) setfill(c) // 埋め文字指定('0')
#define ALL(v) v.begin(), v.end()

vector<vector<ll>> v;

// 順列を全通り生成
void p(ll i)
{

}

int main(int argc, char const *argv[])
{
    ll n, k;
    cin >> n >> k;

    for (ll i = 0; i < n; i++)
    {
        vector<ll> temp;
        for (ll j = 0; j < n; j++)
        {
            ll t;
            cin >> t;
            temp.push_back(t);
        }
        v.push_back(temp);
    }

    ll ans = 0;

    vector<int> nums(n - 1);
    iota(nums.begin(), nums.end(), 0);

    do
    {
        ll sum = 0;
        sum += v[0][nums[0] + 1];
        for (ll i = 0; i < n - 2; i++)
        {
            // cout << nums[i] + 1 << " " << nums[i + 1] + 1 << endl;
            sum += v[nums[i] + 1][nums[i + 1] + 1];
        }
        
        sum += v[nums.back() + 1][0];

        // cout << sum << endl;

        if (sum == k)
        {
            ans++;
        }
    } while (next_permutation(nums.begin(), nums.end()));

    cout << ans << endl;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int maxn=200005;
const int inf=1ll<<60;

struct Node {
	int w,v;
	bool operator < (const Node &rhs) const {
		return v>rhs.v;
	}
} a[maxn];

int top;
int x[maxn];
int st[maxn];
int vis[maxn];

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++) {
		cin>>a[i].w>>a[i].v;
	}
	for(int i=1;i<=m;i++) {
		cin>>x[i];
	}
	sort(a+1,a+n+1);
	while(q--) {
		int l,r;
		cin>>l>>r;
		top=0;
		for(int i=1;i<=l-1;i++) {
			st[++top]=x[i];
		}
		for(int i=r+1;i<=m;i++) {
			st[++top]=x[i];
		}
		sort(st+1,st+top+1);
		memset(vis,0,sizeof(vis));
		int ans=0;
		for(int i=1;i<=n;i++) {
			int pos=-1;
			for(int j=top;j>=1;j--) {
				if(!vis[j]&&st[j]>=a[i].w) {
					pos=j;
				}
			}
			if(pos!=-1&&pos<=top&&st[pos]>=a[i].w) {
				vis[pos]=1;
				ans+=a[i].v;
			}
		}
		cout<<ans<<"\n";
	}
}