#include<bits/stdc++.h>
using namespace std;
int n,m,w;
int c[10100],d[10100],b[101000];
int f[100000];
int h;
int find(int x){
if(b[x]==x) return x;
else return b[x]=find(b[x]);
}
int main(){
freopen("P1455_6.in","r",stdin);
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=n;i++){
scanf("%d%d",&c[i],&d[i]);
}
for(int i=1;i<=n;i++){
b[i]=i;
}
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
if(find(x)==find(y)) continue;
b[find(x)]=find(y);
}
for(int i=1;i<=n;i++){
if(b[find(i)]!=i){
d[find(i)]+=d[i];
d[i]=0;
c[find(i)]+=c[i];
c[i]=0;
}
}
for(int i=1;i<=n;i++){
if(b[find(i)]!=i) continue;
for(int j=w;j>=c[i];j--){
f[j]=max(f[j],f[j-c[i]]+d[i]);
}
}
cout<<f[w];
}
然鹅