rt
wa#11
#include<bits/stdc++.h>
using namespace std;
int fa[10005];
pair<int,int> s[10005];
int find(int xx){
int x=xx;
while(x^fa[x])x=fa[x];
while(xx^fa[x])fa[xx]=x, xx=fa[xx];
return x;
}
int dp[10005];
int main(){
int n, m, w;
cin>>n>>m>>w;
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
cin>>s[i].first>>s[i].second;
for(int i=1;i<=m;i++){
int u, v;
cin>>u>>v;
int x=find(u), y=find(v);
if(x==y)
continue;
fa[y]=x;
s[x].first+=s[y].first;
s[x].second+=s[y].second;
}
vector<pair<int,int> > v;
for(int i=1;i<=n;i++)
if(fa[i]==i)
v.push_back(s[i]);
int ma=INT_MIN;
for(int i=1;i<=v.size();i++)
for(int j=w;j>=v[i].first;j--)
dp[j]=max(dp[j], dp[j-v[i].first]+v[i].second), ma=max(ma, dp[j]);
cout<<ma;
return 0;
}